Advertisement
OhMika

Untitled

Aug 20th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.90 KB | None | 0 0
  1. data:text/html;base64,PCFET0NUWVBFIEhUTUw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD4NCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIA0KICAgIHVzZXItc2NhbGFibGU9bm8sIGluaXRpYWwtc2NhbGU9MSwgbWF4aW11bS1zY2FsZT0xLCB1c2VyLXNjYWxhYmxlPTAiIC8+DQo8bWV0YSBuYW1lPSJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlIiBjb250ZW50PSJ5ZXMiIC8+DQo8bWV0YSBuYW1lPSJhcHBsZS1tb2JpbGUtd2ViLWFwcC1zdGF0dXMtYmFyLXN0eWxlIiBjb250ZW50PSJibGFjay10cmFuc2x1Y2VudCIgLz4NCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCmJvZHkgeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJhY2tncm91bmQ6ICMwMDA7fQ0KY2FudmFzIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMCBhdXRvOyBiYWNrZ3JvdW5kOiAjZmZmOyB9DQo8L3N0eWxlPg0KDQo8L2hlYWQ+DQoNCjxib2R5Pg0KPGNhbnZhcz48L2NhbnZhcz4NCjxzY3JpcHQ+DQoNCi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcNCi8vIHNoaW0gbGF5ZXIgd2l0aCBzZXRUaW1lb3V0IGZhbGxiYWNrDQp3aW5kb3cucmVxdWVzdEFuaW1GcmFtZSA9IChmdW5jdGlvbigpew0KICByZXR1cm4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgICAgICAgfHwgDQogICAgICAgICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCANCiAgICAgICAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lICAgIHx8IA0KICAgICAgICAgIHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lICAgICAgfHwgDQogICAgICAgICAgd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lICAgICB8fCANCiAgICAgICAgICBmdW5jdGlvbiggY2FsbGJhY2sgKXsNCiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApOw0KICAgICAgICAgIH07DQp9KSgpOw0KDQovLyBuYW1lc3BhY2Ugb3VyIGdhbWUNCnZhciBQT1AgPSB7DQoNCiAgICAvLyBzZXQgdXAgc29tZSBpbml0YWwgdmFsdWVzDQogICAgV0lEVEg6IHNjcmVlbi53aWR0aCwNCiAgICBIRUlHSFQ6IHNjcmVlbi5oZWlnaHQsDQogICAgLy8gIFdJRFRIOiAzMjAsIA0KICAgIC8vIEhFSUdIVDogIDQ4MCwgDQogICAgc2NhbGU6ICAxLA0KICAgIC8vIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2FudmFzDQogICAgLy8gaW4gcmVsYXRpb24gdG8gdGhlIHNjcmVlbg0KICAgIG9mZnNldDoge3RvcDogMCwgbGVmdDogMH0sDQogICAgLy8gc3RvcmUgYWxsIGJ1YmJsZSwgdG91Y2hlcywgcGFydGljbGVzIGV0Yw0KICAgIGVudGl0aWVzOiBbXSwNCiAgICAvLyB0aGUgYW1vdW50IG9mIGdhbWUgdGlja3MgdW50aWwNCiAgICAvLyB3ZSBzcGF3biBhIGJ1YmJsZQ0KICAgIG5leHRCdWJibGU6IDEwMCwNCiAgICAvLyBmb3IgdHJhY2tpbmcgcGxheWVyJ3MgcHJvZ3Jlc3MNCiAgICBzY29yZTogew0KICAgICAgICB0YXBzOiAwLA0KICAgICAgICBoaXQ6IDAsDQogICAgICAgIGVzY2FwZWQ6IDAsDQogICAgICAgIGFjY3VyYWN5OiAwDQogICAgfSwNCiAgICAvLyB3ZSdsbCBzZXQgdGhlIHJlc3Qgb2YgdGhlc2UNCiAgICAvLyBpbiB0aGUgaW5pdCBmdW5jdGlvbg0KICAgIFJBVElPOiAgbnVsbCwNCiAgICBjdXJyZW50V2lkdGg6ICBudWxsLA0KICAgIGN1cnJlbnRIZWlnaHQ6ICBudWxsLA0KICAgIGNhbnZhczogbnVsbCwNCiAgICBjdHg6ICBudWxsLA0KICAgIHVhOiAgbnVsbCwNCiAgICBhbmRyb2lkOiBudWxsLA0KICAgIGlvczogIG51bGwsDQoNCiAgICBpbml0OiBmdW5jdGlvbigpIHsNCiAgIA0KICAgICAgICAvLyB0aGUgcHJvcG9ydGlvbiBvZiB3aWR0aCB0byBoZWlnaHQNCiAgICAgICAgUE9QLlJBVElPID0gUE9QLldJRFRIIC8gUE9QLkhFSUdIVDsNCiAgICAgICAgLy8gdGhlc2Ugd2lsbCBjaGFuZ2Ugd2hlbiB0aGUgc2NyZWVuIGlzIHJlc2l6ZQ0KICAgICAgICBQT1AuY3VycmVudFdpZHRoID0gUE9QLldJRFRIOw0KICAgICAgICBQT1AuY3VycmVudEhlaWdodCA9IFBPUC5IRUlHSFQ7DQogICAgICAgIC8vIHRoaXMgaXMgb3VyIGNhbnZhcyBlbGVtZW50DQogICAgICAgIFBPUC5jYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJylbMF07DQogICAgICAgIC8vIGl0J3MgaW1wb3J0YW50IHRvIHNldCB0aGlzDQogICAgICAgIC8vIG90aGVyd2lzZSB0aGUgYnJvd3NlciB3aWxsDQogICAgICAgIC8vIGRlZmF1bHQgdG8gMzIweDIwMA0KICAgICAgICBQT1AuY2FudmFzLndpZHRoID0gUE9QLldJRFRIOw0KICAgICAgICBQT1AuY2FudmFzLmhlaWdodCA9IFBPUC5IRUlHSFQ7DQogICAgICAgIC8vIHRoZSBjYW52YXMgY29udGV4dCBhbGxvd3MgdXMgdG8gDQogICAgICAgIC8vIGludGVyYWN0IHdpdGggdGhlIGNhbnZhcyBhcGkNCiAgICAgICAgUE9QLmN0eCA9IFBPUC5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsNCiAgICAgICAgLy8gd2UgbmVlZCB0byBzbmlmZiBvdXQgYW5kcm9pZCAmIGlvcw0KICAgICAgICAvLyBzbyB3ZSBjYW4gaGlkZSB0aGUgYWRkcmVzcyBiYXIgaW4NCiAgICAgICAgLy8gb3VyIHJlc2l6ZSBmdW5jdGlvbg0KICAgICAgICBQT1AudWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7DQogICAgICAgIFBPUC5hbmRyb2lkID0gUE9QLnVhLmluZGV4T2YoJ2FuZHJvaWQnKSA+IC0xID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICBQT1AuaW9zID0gKCBQT1AudWEuaW5kZXhPZignaXBob25lJykgPiAtMSB8fCBQT1AudWEuaW5kZXhPZignaXBhZCcpID4gLTEgICkgPyB0cnVlIDogZmFsc2U7DQoNCiAgICAgICAgLy8gc2V0IHVwIG91ciB3YXZlIGVmZmVjdA0KICAgICAgICAvLyBiYXNpY2FsbHksIGEgc2VyaWVzIG9mIG92ZXJsYXBwaW5nIGNpcmNsZXMNCiAgICAgICAgLy8gYWNyb3NzIHRoZSB0b3Agb2Ygc2NyZWVuDQogICAgICAgIFBPUC53YXZlID0gew0KICAgICAgICAgICAgeDogLTI1LCAvLyB4IGNvb3JkIG9mIGZpcnN0IGNpcmNsZQ0KICAgICAgICAgICAgeTogLTQwLCAvLyB5IGNvb3JkIG9mIGZpcnN0IGNpcmNsZQ0KICAgICAgICAgICAgcjogNTAsIC8vIGNpcmNsZSByYWRpdXMNCiAgICAgICAgICAgIHRpbWU6IDAsIC8vIHdlJ2xsIHVzZSB0aGlzIGluIGNhbGN1bGF0aW5nIHRoZSBzaW5lIHdhdmUNCiAgICAgICAgICAgIG9mZnNldDogMCAvLyB0aGlzIHdpbGwgYmUgdGhlIHNpbmUgd2F2ZSBvZmZzZXQNCiAgICAgICAgfTsgDQogICAgICAgIC8vIGNhbGN1bGF0ZSBob3cgbWFueSBjaXJjbGVzIHdlIG5lZWQgdG8gDQogICAgICAgIC8vIGNvdmVyIHRoZSBzY3JlZW4gd2lkdGgNCiAgICAgICAgUE9QLndhdmUudG90YWwgPSBNYXRoLmNlaWwoUE9QLldJRFRIIC8gUE9QLndhdmUucikgKyAxOw0KDQogICAgICAgIC8vIGxpc3RlbiBmb3IgY2xpY2tzDQogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIFBPUC5JbnB1dC5zZXQoZSk7DQogICAgICAgIH0sIGZhbHNlKTsNCg0KICAgICAgICAvLyBsaXN0ZW4gZm9yIHRvdWNoZXMNCiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBmdW5jdGlvbihlKSB7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAvLyB0aGUgZXZlbnQgb2JqZWN0IGhhcyBhbiBhcnJheQ0KICAgICAgICAgICAgLy8gY2FsbGVkIHRvdWNoZXMsIHdlIGp1c3Qgd2FudA0KICAgICAgICAgICAgLy8gdGhlIGZpcnN0IHRvdWNoDQogICAgICAgICAgICBQT1AuSW5wdXQuc2V0KGUudG91Y2hlc1swXSk7DQogICAgICAgIH0sIGZhbHNlKTsNCiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAgIC8vIHdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMNCiAgICAgICAgICAgIC8vIGJ1dCBwcmV2ZW50IGRlZmF1bHQgYmVoYXZpb3VyDQogICAgICAgICAgICAvLyBzbyB0aGUgc2NyZWVuIGRvZXNuJ3Qgc2Nyb2xsDQogICAgICAgICAgICAvLyBvciB6b29tDQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgIH0sIGZhbHNlKTsNCiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgLy8gYXMgYWJvdmUNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgfSwgZmFsc2UpOw0KDQogICAgICAgIC8vIHdlJ3JlIHJlYWR5IHRvIHJlc2l6ZQ0KICAgICAgICBQT1AucmVzaXplKCk7DQoNCiAgICAgICAgUE9QLmxvb3AoKTsNCg0KICAgIH0sDQoNCg0KICAgIHJlc2l6ZTogZnVuY3Rpb24oKSB7DQogICAgDQogICAgICAgIFBPUC5jdXJyZW50SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0Ow0KICAgICAgICAvLyByZXNpemUgdGhlIHdpZHRoIGluIHByb3BvcnRpb24NCiAgICAgICAgLy8gdG8gdGhlIG5ldyBoZWlnaHQNCiAgICAgICAgUE9QLmN1cnJlbnRXaWR0aCA9IFBPUC5jdXJyZW50SGVpZ2h0ICogUE9QLlJBVElPOw0KDQogICAgICAgIC8vIHRoaXMgd2lsbCBjcmVhdGUgc29tZSBleHRyYSBzcGFjZSBvbiB0aGUNCiAgICAgICAgLy8gcGFnZSwgYWxsb3dpbmcgdXMgdG8gc2Nyb2xsIHBhc3MNCiAgICAgICAgLy8gdGhlIGFkZHJlc3MgYmFyLCBhbmQgdGh1cyBoaWRlIGl0Lg0KICAgICAgICBpZiAoUE9QLmFuZHJvaWQgfHwgUE9QLmlvcykgew0KICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICsgNTApICsgJ3B4JzsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIHNldCB0aGUgbmV3IGNhbnZhcyBzdHlsZSB3aWR0aCAmIGhlaWdodA0KICAgICAgICAvLyBub3RlOiBvdXIgY2FudmFzIGlzIHN0aWxsIDMyMHg0ODAgYnV0DQogICAgICAgIC8vIHdlJ3JlIGVzc2VudGlhbGx5IHNjYWxpbmcgaXQgd2l0aCBDU1MNCiAgICAgICAgUE9QLmNhbnZhcy5zdHlsZS53aWR0aCA9IFBPUC5jdXJyZW50V2lkdGggKyAncHgnOw0KICAgICAgICBQT1AuY2FudmFzLnN0eWxlLmhlaWdodCA9IFBPUC5jdXJyZW50SGVpZ2h0ICsgJ3B4JzsNCg0KICAgICAgICAvLyB0aGUgYW1vdW50IGJ5IHdoaWNoIHRoZSBjc3MgcmVzaXplZCBjYW52YXMNCiAgICAgICAgLy8gaXMgZGlmZmVyZW50IHRvIHRoZSBhY3R1YWwgKDQ4MHgzMjApIHNpemUuDQogICAgICAgIFBPUC5zY2FsZSA9IFBPUC5jdXJyZW50V2lkdGggLyBQT1AuV0lEVEg7DQogICAgICAgIC8vIHBvc2l0aW9uIG9mIGNhbnZhcyBpbiByZWxhdGlvbiB0bw0KICAgICAgICAvLyB0aGUgc2NyZWVuDQogICAgICAgIFBPUC5vZmZzZXQudG9wID0gUE9QLmNhbnZhcy5vZmZzZXRUb3A7DQogICAgICAgIFBPUC5vZmZzZXQubGVmdCA9IFBPUC5jYW52YXMub2Zmc2V0TGVmdDsNCg0KICAgICAgICAvLyB3ZSB1c2UgYSB0aW1lb3V0IGhlcmUgYXMgc29tZSBtb2JpbGUNCiAgICAgICAgLy8gYnJvd3NlcnMgd29uJ3Qgc2Nyb2xsIGlmIHRoZXJlIGlzIG5vdA0KICAgICAgICAvLyBhIHNtYWxsIGRlbGF5DQogICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLDEpOw0KICAgICAgICB9LCAxKTsNCiAgICB9LA0KDQogICAgLy8gdGhpcyBpcyB3aGVyZSBhbGwgZW50aXRpZXMgd2lsbCBiZSBtb3ZlZA0KICAgIC8vIGFuZCBjaGVja2VkIGZvciBjb2xsaXNpb25zIGV0Yw0KICAgIHVwZGF0ZTogZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciBpLA0KICAgICAgICAgICAgY2hlY2tDb2xsaXNpb24gPSBmYWxzZTsgLy8gd2Ugb25seSBuZWVkIHRvIGNoZWNrIGZvciBhIGNvbGxpc2lvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdXNlciB0YXBwZWQgb24gdGhpcyBnYW1lIHRpY2sNCiANCg0KICAgICAgICAvLyBkZWNyZWFzZSBvdXIgbmV4dEJ1YmJsZSBjb3VudGVyDQogICAgICAgIFBPUC5uZXh0QnViYmxlIC09IDE7DQogICAgICAgIC8vIGlmIHRoZSBjb3VudGVyIGlzIGxlc3MgdGhhbiB6ZXJvDQogICAgICAgIGlmIChQT1AubmV4dEJ1YmJsZSA8IDApIHsNCiAgICAgICAgICAgIC8vIHB1dCBhIG5ldyBpbnN0YW5jZSBvZiBidWJibGUgaW50byBvdXIgZW50aXRpZXMgYXJyYXkNCiAgICAgICAgICAgIFBPUC5lbnRpdGllcy5wdXNoKG5ldyBQT1AuQnViYmxlKCkpOw0KICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGNvdW50ZXIgd2l0aCBhIHJhbmRvbSB2YWx1ZQ0KICAgICAgICAgICAgUE9QLm5leHRCdWJibGUgPSAoIE1hdGgucmFuZG9tKCkgKiAxMDAgKSArIDEwMDsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIHNwYXduIGEgbmV3IGluc3RhbmNlIG9mIFRvdWNoDQogICAgICAgIC8vIGlmIHRoZSB1c2VyIGhhcyB0YXBwZWQgdGhlIHNjcmVlbg0KICAgICAgICBpZiAoUE9QLklucHV0LnRhcHBlZCkgew0KICAgICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiB0YXBzOyBuZWVkZWQgdG8gDQogICAgICAgICAgICAvLyBjYWxjdWxhdGUgYWNjdXJhY3kNCiAgICAgICAgICAgIFBPUC5zY29yZS50YXBzICs9IDE7DQogICAgICAgICAgICAvLyBhZGQgYSBuZXcgdG91Y2gNCiAgICAgICAgICAgIFBPUC5lbnRpdGllcy5wdXNoKG5ldyBQT1AuVG91Y2goUE9QLklucHV0LngsIFBPUC5JbnB1dC55KSk7DQogICAgICAgICAgICAvLyBzZXQgdGFwcGVkIGJhY2sgdG8gZmFsc2UNCiAgICAgICAgICAgIC8vIHRvIGF2b2lkIHNwYXduaW5nIGEgbmV3IHRvdWNoDQogICAgICAgICAgICAvLyBpbiB0aGUgbmV4dCBjeWNsZQ0KICAgICAgICAgICAgUE9QLklucHV0LnRhcHBlZCA9IGZhbHNlOw0KICAgICAgICAgICAgY2hlY2tDb2xsaXNpb24gPSB0cnVlOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gY3ljbGUgdGhyb3VnaCBhbGwgZW50aXRpZXMgYW5kIHVwZGF0ZSBhcyBuZWNlc3NhcnkNCiAgICAgICAgZm9yIChpID0gMDsgaSA8IFBPUC5lbnRpdGllcy5sZW5ndGg7IGkgKz0gMSkgew0KICAgICAgICAgICAgUE9QLmVudGl0aWVzW2ldLnVwZGF0ZSgpOw0KDQogICAgICAgICAgICBpZiAoUE9QLmVudGl0aWVzW2ldLnR5cGUgPT09ICdidWJibGUnICYmIGNoZWNrQ29sbGlzaW9uKSB7DQogICAgICAgICAgICAgICAgaGl0ID0gUE9QLmNvbGxpZGVzKFBPUC5lbnRpdGllc1tpXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eDogUE9QLklucHV0LngsIHk6IFBPUC5JbnB1dC55LCByOiA3fSk7DQogICAgICAgICAgICAgICAgaWYgKGhpdCkgew0KICAgICAgICAgICAgICAgICAgICAvLyBzcGF3biBhbiBleHBvc2lvbg0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IDU7IG4gKz0xICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgUE9QLmVudGl0aWVzLnB1c2gobmV3IFBPUC5QYXJ0aWNsZSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1AuZW50aXRpZXNbaV0ueCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9QLmVudGl0aWVzW2ldLnksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJhbmRvbSBvcGFjaXR5IHRvIHNwaWNlIGl0IHVwIGEgYml0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JnYmEoMjU1LDI1NSwyNTUsJytNYXRoLnJhbmRvbSgpKjErJyknDQogICAgICAgICAgICAgICAgICAgICAgICApKTsgDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgUE9QLnNjb3JlLmhpdCArPSAxOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIFBPUC5lbnRpdGllc1tpXS5yZW1vdmUgPSBoaXQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIGRlbGV0ZSBmcm9tIGFycmF5IGlmIHJlbW92ZSBwcm9wZXJ0eQ0KICAgICAgICAgICAgLy8gZmxhZyBpcyBzZXQgdG8gdHJ1ZQ0KICAgICAgICAgICAgaWYgKFBPUC5lbnRpdGllc1tpXS5yZW1vdmUpIHsNCiAgICAgICAgICAgICAgICBQT1AuZW50aXRpZXMuc3BsaWNlKGksIDEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gdXBkYXRlIHdhdmUgb2Zmc2V0DQogICAgICAgIC8vIGZlZWwgZnJlZSB0byBwbGF5IHdpdGggdGhlc2UgdmFsdWVzIGZvcg0KICAgICAgICAvLyBlaXRoZXIgc2xvd2VyIG9yIGZhc3RlciB3YXZlcw0KICAgICAgICBQT1Aud2F2ZS50aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKiAwLjAwMjsNCiAgICAgICAgUE9QLndhdmUub2Zmc2V0ID0gTWF0aC5zaW4oUE9QLndhdmUudGltZSAqIDAuOCkgKiA1Ow0KDQogICAgICAgIC8vIGNhbGN1bGF0ZSBhY2N1cmFjeQ0KICAgICAgICBQT1Auc2NvcmUuYWNjdXJhY3kgPSAoUE9QLnNjb3JlLmhpdCAvIFBPUC5zY29yZS50YXBzKSAqIDEwMDsNCiAgICAgICAgUE9QLnNjb3JlLmFjY3VyYWN5ID0gaXNOYU4oUE9QLnNjb3JlLmFjY3VyYWN5KSA/DQogICAgICAgICAgICAwIDoNCiAgICAgICAgICAgIH5+KFBPUC5zY29yZS5hY2N1cmFjeSk7IC8vIGEgaGFuZHkgd2F5IHRvIHJvdW5kIGZsb2F0cw0KDQogICAgfSwNCg0KDQogICAgLy8gdGhpcyBpcyB3aGVyZSB3ZSBkcmF3IGFsbCB0aGUgZW50aXRpZXMNCiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgew0KDQogICAgICAgIHZhciBpOw0KDQoNCiAgICAgICAgUE9QLkRyYXcucmVjdCgwLCAwLCBQT1AuV0lEVEgsIFBPUC5IRUlHSFQsICcjMDM2Jyk7DQoNCiAgICAgICAgLy8gZGlzcGxheSBzbmF6enkgd2F2ZSBlZmZlY3QNCiAgICAgICAgZm9yIChpID0gMDsgaSA8IFBPUC53YXZlLnRvdGFsOyBpKyspIHsNCg0KICAgICAgICAgICAgUE9QLkRyYXcuY2lyY2xlKA0KICAgICAgICAgICAgICAgICAgICAgICAgUE9QLndhdmUueCArIFBPUC53YXZlLm9mZnNldCArICAoaSAqIFBPUC53YXZlLnIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgIFBPUC53YXZlLnksDQogICAgICAgICAgICAgICAgICAgICAgICBQT1Aud2F2ZS5yLCANCiAgICAgICAgICAgICAgICAgICAgICAgICcjZmZmJyk7IA0KICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIGN5Y2xlIHRocm91Z2ggYWxsIGVudGl0aWVzIGFuZCByZW5kZXIgdG8gY2FudmFzDQogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUE9QLmVudGl0aWVzLmxlbmd0aDsgaSArPSAxKSB7DQogICAgICAgICAgICAgICAgUE9QLmVudGl0aWVzW2ldLnJlbmRlcigpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gZGlzcGxheSBzY29yZXMNCiAgICAgICAgUE9QLkRyYXcudGV4dCgnSGl0OiAnICsgUE9QLnNjb3JlLmhpdCwgMjAsIDMwLCAxNCwgJyNmZmYnKTsNCiAgICAgICAgUE9QLkRyYXcudGV4dCgnRXNjYXBlZDogJyArIFBPUC5zY29yZS5lc2NhcGVkLCAyMCwgNTAsIDE0LCAnI2ZmZicpOw0KICAgICAgICBQT1AuRHJhdy50ZXh0KCdBY2N1cmFjeTogJyArIFBPUC5zY29yZS5hY2N1cmFjeSArICclJywgMjAsIDcwLCAxNCwgJyNmZmYnKTsNCg0KICAgIH0sDQoNCg0KICAgIC8vIHRoZSBhY3R1YWwgbG9vcA0KICAgIC8vIHJlcXVlc3RzIGFuaW1hdGlvbiBmcmFtZQ0KICAgIC8vIHRoZW4gcHJvY2VlZHMgdG8gdXBkYXRlDQogICAgLy8gYW5kIHJlbmRlcg0KICAgIGxvb3A6IGZ1bmN0aW9uKCkgew0KDQogICAgICAgIHJlcXVlc3RBbmltRnJhbWUoIFBPUC5sb29wICk7DQoNCiAgICAgICAgUE9QLnVwZGF0ZSgpOw0KICAgICAgICBQT1AucmVuZGVyKCk7DQogICAgfQ0KDQoNCn07DQoNCi8vIGNoZWNrcyBpZiB0d28gZW50dGllcyBhcmUgdG91Y2hpbmcNClBPUC5jb2xsaWRlcyA9IGZ1bmN0aW9uKGEsIGIpIHsNCg0KICAgICAgICB2YXIgZGlzdGFuY2Vfc3F1YXJlZCA9ICggKChhLnggLSBiLngpICogKGEueCAtIGIueCkpICsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYS55IC0gYi55KSAqIChhLnkgLSBiLnkpKSk7DQoNCiAgICAgICAgdmFyIHJhZGlpX3NxdWFyZWQgPSAoYS5yICsgYi5yKSAqIChhLnIgKyBiLnIpOw0KDQogICAgICAgIGlmIChkaXN0YW5jZV9zcXVhcmVkIDwgcmFkaWlfc3F1YXJlZCkgew0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCn07DQoNCg0KLy8gYWJzdHJhY3RzIHZhcmlvdXMgY2FudmFzIG9wZXJhdGlvbnMgaW50bw0KLy8gc3RhbmRhbG9uZSBmdW5jdGlvbnMNClBPUC5EcmF3ID0gew0KDQogICAgY2xlYXI6IGZ1bmN0aW9uKCkgew0KICAgICAgICBQT1AuY3R4LmNsZWFyUmVjdCgwLCAwLCBQT1AuV0lEVEgsIFBPUC5IRUlHSFQpOw0KICAgIH0sDQoNCg0KICAgIHJlY3Q6IGZ1bmN0aW9uKHgsIHksIHcsIGgsIGNvbCkgew0KICAgICAgICBQT1AuY3R4LmZpbGxTdHlsZSA9IGNvbDsNCiAgICAgICAgUE9QLmN0eC5maWxsUmVjdCh4LCB5LCB3LCBoKTsNCiAgICB9LA0KDQogICAgY2lyY2xlOiBmdW5jdGlvbih4LCB5LCByLCBjb2wpIHsNCiAgICAgICAgUE9QLmN0eC5maWxsU3R5bGUgPSBjb2w7DQogICAgICAgIFBPUC5jdHguYmVnaW5QYXRoKCk7DQogICAgICAgIFBPUC5jdHguYXJjKHggKyA1LCB5ICsgNSwgciwgMCwgIE1hdGguUEkgKiAyLCB0cnVlKTsNCiAgICAgICAgUE9QLmN0eC5jbG9zZVBhdGgoKTsNCiAgICAgICAgUE9QLmN0eC5maWxsKCk7DQogICAgfSwNCg0KDQogICAgdGV4dDogZnVuY3Rpb24oc3RyaW5nLCB4LCB5LCBzaXplLCBjb2wpIHsNCiAgICAgICAgUE9QLmN0eC5mb250ID0gJ2JvbGQgJytzaXplKydweCBNb25vc3BhY2UnOw0KICAgICAgICBQT1AuY3R4LmZpbGxTdHlsZSA9IGNvbDsNCiAgICAgICAgUE9QLmN0eC5maWxsVGV4dChzdHJpbmcsIHgsIHkpOw0KICAgIH0NCg0KfTsNCg0KDQoNClBPUC5JbnB1dCA9IHsNCg0KICAgIHg6IDAsDQogICAgeTogMCwNCiAgICB0YXBwZWQgOmZhbHNlLA0KDQogICAgc2V0OiBmdW5jdGlvbihkYXRhKSB7DQogICAgICAgIHRoaXMueCA9IChkYXRhLnBhZ2VYIC0gUE9QLm9mZnNldC5sZWZ0KSAvIFBPUC5zY2FsZTsNCiAgICAgICAgdGhpcy55ID0gKGRhdGEucGFnZVkgLSBQT1Aub2Zmc2V0LnRvcCkgLyBQT1Auc2NhbGU7DQogICAgICAgIHRoaXMudGFwcGVkID0gdHJ1ZTsNCg0KICAgIH0NCg0KfTsNCg0KUE9QLlRvdWNoID0gZnVuY3Rpb24oeCwgeSkgew0KDQogICAgdGhpcy50eXBlID0gJ3RvdWNoJzsgICAgLy8gd2UnbGwgbmVlZCB0aGlzIGxhdGVyDQogICAgdGhpcy54ID0geDsgICAgICAgICAgICAgLy8gdGhlIHggY29vcmRpbmF0ZQ0KICAgIHRoaXMueSA9IHk7ICAgICAgICAgICAgIC8vIHRoZSB5IGNvb3JkaW5hdGUNCiAgICB0aGlzLnIgPSA1OyAgICAgICAgICAgICAvLyB0aGUgcmFkaXVzDQogICAgdGhpcy5vcGFjaXR5ID0gMTsgICAgICAgLy8gaW5pdGFsIG9wYWNpdHkuIHRoZSBkb3Qgd2lsbCBmYWRlIG91dA0KICAgIHRoaXMuZmFkZSA9IDAuMDU7ICAgICAgIC8vIGFtb3VudCBieSB3aGljaCB0byBmYWRlIG9uIGVhY2ggZ2FtZSB0aWNrDQogICAgLy8gdGhpcy5yZW1vdmUgPSBmYWxzZTsgICAgLy8gZmxhZyBmb3IgcmVtb3ZpbmcgdGhpcyBlbnRpdHkuIFBPUC51cGRhdGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIHRha2UgY2FyZSBvZiB0aGlzDQoNCiAgICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKCkgew0KICAgICAgICAvLyByZWR1Y3QgdGhlIG9wYWNpdHkgYWNjb3JkaW5nbHkNCiAgICAgICAgdGhpcy5vcGFjaXR5IC09IHRoaXMuZmFkZTsgDQogICAgICAgIC8vIGlmIG9wYWNpdHkgaWYgMCBvciBsZXNzLCBmbGFnIGZvciByZW1vdmFsDQogICAgICAgIHRoaXMucmVtb3ZlID0gKHRoaXMub3BhY2l0eSA8IDApID8gdHJ1ZSA6IGZhbHNlOw0KICAgIH07DQoNCiAgICB0aGlzLnJlbmRlciA9IGZ1bmN0aW9uKCkgew0KICAgICAgICBQT1AuRHJhdy5jaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMuciwgJ3JnYmEoMjU1LDAsMCwnK3RoaXMub3BhY2l0eSsnKScpOw0KICAgIH07DQoNCn07DQoNClBPUC5CdWJibGUgPSBmdW5jdGlvbigpIHsNCg0KICAgIHRoaXMudHlwZSA9ICdidWJibGUnOw0KICAgIHRoaXMuciA9IChNYXRoLnJhbmRvbSgpICogMjApICsgMTA7DQogICAgdGhpcy5zcGVlZCA9IChNYXRoLnJhbmRvbSgpICogMykgKyAxOw0KIA0KICAgIHRoaXMueCA9IChNYXRoLnJhbmRvbSgpICogKFBPUC5XSURUSCkgLSB0aGlzLnIpOw0KICAgIHRoaXMueSA9IFBPUC5IRUlHSFQgKyAoTWF0aC5yYW5kb20oKSAqIDEwMCkgKyAxMDA7DQoNCiAgICAvLyB0aGUgYW1vdW50IGJ5IHdoaWNoIHRoZSBidWJibGUNCiAgICAvLyB3aWxsIG1vdmUgZnJvbSBzaWRlIHRvIHNpZGUNCiAgICB0aGlzLndhdmVTaXplID0gNSArIHRoaXMucjsNCiAgICAvLyB3ZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBvcmlnaW5hbA0KICAgIC8vIHggcG9zaXRpb24gZm9yIG91ciBzaW5lIHdhdmUgY2FsY3VsYXRpb24NCiAgICB0aGlzLnhDb25zdGFudCA9IHRoaXMueDsNCg0KICAgIHRoaXMucmVtb3ZlID0gZmFsc2U7DQoNCg0KICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oKSB7DQoNCiAgICAgICAgLy8gYSBzaW5lIHdhdmUgaXMgY29tbW9ubHkgYSBmdW5jdGlvbiBvZiB0aW1lDQogICAgICAgIHZhciB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKiAwLjAwMjsNCg0KICAgICAgICB0aGlzLnkgLT0gdGhpcy5zcGVlZDsNCiAgICAgICAgLy8gdGhlIHggY29vcmQgdG8gZm9sbG93IGEgc2luZSB3YXZlDQogICAgICAgIHRoaXMueCA9IHRoaXMud2F2ZVNpemUgKiBNYXRoLnNpbih0aW1lKSArIHRoaXMueENvbnN0YW50Ow0KDQogICAgICAgIC8vIGlmIG9mZnNjcmVlbiBmbGFnIGZvciByZW1vdmFsDQogICAgICAgIGlmICh0aGlzLnkgPCAtMTApIHsNCiAgICAgICAgICAgIFBPUC5zY29yZS5lc2NhcGVkICs9IDE7IC8vIHVwZGF0ZSBzY29yZQ0KICAgICAgICAgICAgdGhpcy5yZW1vdmUgPSB0cnVlOw0KICAgICAgICB9DQoNCiAgICB9Ow0KDQogICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbigpIHsNCg0KICAgICAgICBQT1AuRHJhdy5jaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMuciwgJ3JnYmEoMjU1LDI1NSwyNTUsMSknKTsNCiAgICB9Ow0KDQp9Ow0KDQpQT1AuUGFydGljbGUgPSBmdW5jdGlvbih4LCB5LHIsIGNvbCkgew0KDQogICAgdGhpcy54ID0geDsNCiAgICB0aGlzLnkgPSB5Ow0KICAgIHRoaXMuciA9IHI7DQogICAgdGhpcy5jb2wgPSBjb2w7DQoNCiAgICAvLyBkZXRlcm1pbmVzIHdoZXRoZXIgcGFydGljbGUgd2lsbA0KICAgIC8vIHRyYXZlbCB0byB0aGUgcmlnaHQgb2YgbGVmdA0KICAgIC8vIDUwJSBjaGFuY2Ugb2YgZWl0aGVyIGhhcHBlbmluZw0KICAgIHRoaXMuZGlyID0gKE1hdGgucmFuZG9tKCkgKiAyID4gMSkgPyAxIDogLTE7DQoNCiAgICAvLyByYW5kb20gdmFsdWVzIHNvIHBhcnRpY2xlcyBkbyBubw0KICAgIC8vIHRyYXZlbCBhdCB0aGUgc2FtZSBzcGVlZHMNCiAgICB0aGlzLnZ4ID0gfn4oTWF0aC5yYW5kb20oKSAqIDQpICogdGhpcy5kaXI7DQogICAgdGhpcy52eSA9IH5+KE1hdGgucmFuZG9tKCkgKiA3KTsNCg0KICAgIHRoaXMucmVtb3ZlID0gZmFsc2U7DQoNCiAgICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKCkgew0KDQogICAgICAgIC8vIHVwZGF0ZSBjb29yZGluYXRlcw0KICAgICAgICB0aGlzLnggKz0gdGhpcy52eDsNCiAgICAgICAgdGhpcy55ICs9IHRoaXMudnk7DQoNCiAgICAgICAgLy8gaW5jcmVhc2UgdmVsb2NpdHkgc28gcGFydGljbGUNCiAgICAgICAgLy8gYWNjZWxlcmF0ZXMgb2ZmIHNjcmVlbg0KICAgICAgICB0aGlzLnZ4ICo9IDAuOTk7DQogICAgICAgIHRoaXMudnkgKj0gMC45OTsNCg0KICAgICAgICAvLyBhZGRpbmcgdGhpcyBuZWdhdGl2ZSBhbW91bnQgdG8gdGhlDQogICAgICAgIC8vIHkgdmVsb2NpdHkgZXhlcnRzIGFuIHVwd2FyZCBwdWxsIG9uDQogICAgICAgIC8vIHRoZSBwYXJ0aWNsZSwgYXMgaWYgZHJhd24gdG8gdGhlDQogICAgICAgIC8vIHN1cmZhY2UNCiAgICAgICAgdGhpcy52eSAtPSAwLjI1Ow0KDQogICAgICAgIC8vIG9mZnNjcmVlbg0KICAgICAgICBpZiAodGhpcy55IDwgMCkgew0KICAgICAgICAgICAgdGhpcy5yZW1vdmUgPSB0cnVlOw0KICAgICAgICB9DQoNCiAgICB9Ow0KDQoNCiAgICB0aGlzLnJlbmRlciA9IGZ1bmN0aW9uKCkgew0KICAgICAgICBQT1AuRHJhdy5jaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMuciwgdGhpcy5jb2wpOw0KICAgIH07DQoNCn07DQoNCndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgUE9QLmluaXQsIGZhbHNlKTsNCndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBQT1AucmVzaXplLCBmYWxzZSk7DQoNCjwvc2NyaXB0Pg0KDQoNCjwvYm9keT4NCjwvaHRtbD4NCg==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement