{ "log": { "version": "1.2", "creator": { "name": "WebInspector", "version": "537.36" }, "pages": [ { "startedDateTime": "2019-10-22T02:03:59.697Z", "id": "page_6", "title": "http://dev.chronicler-notes.com:8000/callback?error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.&error_uri=https%3A%2F%2Fdeveloper.github.com%2Fapps%2Fmanaging-oauth-apps%2Ftroubleshooting-authorization-request-errors%2F%23redirect-uri-mismatch&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "pageTimings": { "onContentLoad": 446.12499998766, "onLoad": 455.0769999914337 } }, { "startedDateTime": "2019-10-22T02:03:59.243Z", "id": "page_5", "title": "https://github.com/sessions/two-factor", "pageTimings": { "onContentLoad": null, "onLoad": null } }, { "startedDateTime": "2019-10-22T02:03:42.264Z", "id": "page_4", "title": "https://github.com/session", "pageTimings": { "onContentLoad": 867.9819999961182, "onLoad": 977.6830000046175 } }, { "startedDateTime": "2019-10-22T02:03:36.681Z", "id": "page_3", "title": "https://chronicler-notes.auth0.com/authorize?client_id=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&connection=github&sso=true&_intstate=deprecated&_csrf=2L9iIyGy-WLYoA0eGQu3HVnu7abAP8lxBJ_4&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIiwiZW52Ijp7ImxvY2suanMtdWxwIjoiMTEuMTYuMyIsImF1dGgwLmpzLXVscCI6IjkuMTEuMiIsImF1dGgwLmpzIjoiOS4xMS4yIn19&protocol=oauth2", "pageTimings": { "onContentLoad": 901.5519999957178, "onLoad": 1300.3430000098888 } }, { "startedDateTime": "2019-10-22T02:03:32.657Z", "id": "page_2", "title": "https://chronicler-notes.auth0.com/authorize?client_id=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&state=aHu2LAjTuY5TMe0uZLAMrgjFJsHGcPjA&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D", "pageTimings": { "onContentLoad": 867.831000010483, "onLoad": 1441.346000006888 } }, { "startedDateTime": "2019-10-22T02:03:27.033Z", "id": "page_1", "title": "http://dev.chronicler-notes.com:8000/", "pageTimings": { "onContentLoad": 691.8550000118557, "onLoad": 752.9210000066087 } } ], "entries": [ { "startedDateTime": "2019-10-22T02:03:59.685Z", "time": 105.50100000325776, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/callback?error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.&error_uri=https%3A%2F%2Fdeveloper.github.com%2Fapps%2Fmanaging-oauth-apps%2Ftroubleshooting-authorization-request-errors%2F%23redirect-uri-mismatch&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Host", "value": "dev.chronicler-notes.com:8000" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Pragma", "value": "no-cache" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "Accept-Encoding", "value": "gzip, deflate" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Cookie", "value": "io=S8SxzQN4zF33MrC2AAAM; com.auth0.auth.aHu2LAjTuY5TMe0uZLAMrgjFJsHGcPjA={%22nonce%22:%22z94ilIM3Ks130SAvt9MZusSdL2xpnT2J%22%2C%22state%22:%22aHu2LAjTuY5TMe0uZLAMrgjFJsHGcPjA%22}" } ], "queryString": [ { "name": "error", "value": "redirect_uri_mismatch" }, { "name": "error_description", "value": "The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application." }, { "name": "error_uri", "value": "https%3A%2F%2Fdeveloper.github.com%2Fapps%2Fmanaging-oauth-apps%2Ftroubleshooting-authorization-request-errors%2F%23redirect-uri-mismatch" }, { "name": "state", "value": "er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" } ], "cookies": [ { "name": "io", "value": "S8SxzQN4zF33MrC2AAAM", "expires": null, "httpOnly": false, "secure": false }, { "name": "com.auth0.auth.aHu2LAjTuY5TMe0uZLAMrgjFJsHGcPjA", "value": "{%22nonce%22:%22z94ilIM3Ks130SAvt9MZusSdL2xpnT2J%22%2C%22state%22:%22aHu2LAjTuY5TMe0uZLAMrgjFJsHGcPjA%22}", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 985, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "X-Powered-By", "value": "Express" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Cache-Control", "value": "public, max-age=0" }, { "name": "Last-Modified", "value": "Tue, 22 Oct 2019 01:41:34 GMT" }, { "name": "ETag", "value": "W/\"627-16df1206355\"" }, { "name": "Content-Type", "value": "text/html; charset=UTF-8" }, { "name": "Content-Length", "value": "1575" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:59 GMT" }, { "name": "Connection", "value": "keep-alive" } ], "cookies": [], "content": { "size": 1575, "mimeType": "text/html", "compression": 0, "text": "
" }, "redirectURL": "", "headersSize": 326, "bodySize": 1575, "_transferSize": 1901 }, "cache": {}, "timings": { "blocked": 12.439000011600553, "dns": 0.028000000000000025, "ssl": -1, "connect": 0.414, "send": 0.15800000000000003, "wait": 91.81699999885633, "receive": 0.6449999928008765, "_blocked_queueing": 12.156000011600554 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "", "scriptId": "17", "url": "https://github.githubassets.com/assets/redirect-2611abfa.js", "lineNumber": 0, "columnNumber": 108 }, { "functionName": "", "scriptId": "17", "url": "https://github.githubassets.com/assets/redirect-2611abfa.js", "lineNumber": 0, "columnNumber": 141 } ] } }, "_priority": "VeryHigh", "_resourceType": "document", "connection": "387167", "pageref": "page_6" }, { "startedDateTime": "2019-10-22T02:03:59.200Z", "time": 292.0950000116136, "request": { "method": "POST", "url": "https://github.com/sessions/two-factor", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Host", "value": "github.com" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Content-Length", "value": "143" }, { "name": "Pragma", "value": "no-cache" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Origin", "value": "https://github.com" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "Content-Type", "value": "application/x-www-form-urlencoded" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Sec-Fetch-Mode", "value": "navigate" }, { "name": "Sec-Fetch-User", "value": "?1" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "Sec-Fetch-Site", "value": "same-origin" }, { "name": "Referer", "value": "https://github.com/sessions/two-factor" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Cookie", "value": "has_recent_activity=1; ignored_unsupported_browser_notice=false; _octo=GH1.1.172352075.1571709817; logged_in=no; _ga=GA1.2.1816580976.1571709818; _gat=1; tz=America%2FNew_York; _device_id=13e50c3f16d1db048590bb9130505e12; _gh_sess=Mk9yRU1SU2l4SWdzdC90a0NVZWhYN0MrcXVLMitpUEREcVBqaDlDQ25TdkVvcjAvcGo4WDMwMjV5eEwrYmcxbE5EMUFDZDE1YW0wcnlzbjByZHp4bXFMdzQzcEJ4QWVZWEU5TDdMV1VSYUdhSGV4Umtsc29XbDloSnNIUDk0MHU1Yzg3OExxQ1NLb0FESTl6bTBBQno0RGlwdmVoSlRkT1JBU1p0b1dES2Z2REwzY3FOWjdFcU02R1BLNnF2QjQwTGtvTjFQbkc5QlM2TUF6MzRXTVRNbW14R2c3Z1FJNjRXY1RHZGhFRXNNNy9ReHNYSVlRTTZKUDNxVFF3YXVyT3dRQjdvc05pTDYwKzFUcWJiV1NKQjkvZk5qL24wVVFoMXdpTkJKS2hRZUlCMlV0VmFGb3dtSjMrTWVSQ3JlMXlNYnVUTDcwWTI0RWlZaThxNmVOTVB6blA1U0pNZTM2My9NSWV4aUxzdlZPZUJabFZtOGlEN09ZM2lqZncwZ1lwMndZVkUxV2JBOHdBN0UrMDBJeGZBajZHWmMwaThhUGtNSk5KUlZob01HRTBRSlVaWk9wbXhOdFhGaTk3MFVuWmF4YUwyWktTWElaYkw2cFJTZGVmS1NRcW1VN0hJaXNtemY4YzkxZDZJem9jR1hsZFB4NWhZT3daajFIbE1LUUg2WS90bzhlVVgwRXFob2ozQVlNSVE5a1NNM0NzcXE5MWFwQ3dwL1VqUUZnRGQyY3BRZ3J1U2cxT2EyMForbEtzM2Z3TDl3NlpNM1M0M2Uwdit3WkRoUzdxWU9tQURwMmxPREpxQXBybXBPSXBFTjRtN2hEeS96VGJYNFZLK1lYdnhWaG9tcjBPSGdBT1MvL2E4OFVReHVCUElzN1F5ZmxNcVRLVEdsVWhta2VXZTk3T3NXMnBQVHRvcmIvZE45L1pWd3FPVXpjMGpmVXZjVXV2SG5rbVd6Mm9NRDI3K21BQ2tmV2xrM2ZoNmdFcXZxRkF1V3Bqem50YVdUeUtYeCtFOXRYTFdxbkl1VlpyS3JrSHRPeTAxUHp4OTRqS2hlRnBzeFVFOCtYdk1OQ3Mwbk5NMHdxODVuYUdRU2diVDlDeFpXVkNnQTFMdmVITFFITEpBY0RmbTZHL0ZLSnAyRnRrNCt6cXdPQlRQZGI2N29ZeE5idXFMOGdHRWdnNTdYQ1owZkExbW13cmJ3cC93Vi95ekVUUFg5aWFZTldwb2NhNzhwd0ZrWitaQ1k3Rm1oNFVIY2dSeXEvdnRLR2Z6eWd6WGlpRmJuRHFDbkpubFlFZXNrQWdzaXB4d3VMY2R0djhiRFFGcHdQTUk1bEVrcnVBWU90dXJUQ1NYTFRzbXBWMzRxR2N0c2VoUVNoUzVvTldQOWVKdFZxV1NNb000ZUVCcldibk9tbGZEbnc9LS0yY0s1Q2MrS0xoSm5xUnZEbWFibkdRPT0%3D--b3e3b9befc4f16b5be2af12c6435ccba58ffedd5" } ], "queryString": [], "cookies": [ { "name": "has_recent_activity", "value": "1", "expires": null, "httpOnly": false, "secure": false }, { "name": "ignored_unsupported_browser_notice", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "_octo", "value": "GH1.1.172352075.1571709817", "expires": null, "httpOnly": false, "secure": false }, { "name": "logged_in", "value": "no", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1816580976.1571709818", "expires": null, "httpOnly": false, "secure": false }, { "name": "_gat", "value": "1", "expires": null, "httpOnly": false, "secure": false }, { "name": "tz", "value": "America%2FNew_York", "expires": null, "httpOnly": false, "secure": false }, { "name": "_device_id", "value": "13e50c3f16d1db048590bb9130505e12", "expires": null, "httpOnly": false, "secure": false }, { "name": "_gh_sess", "value": "Mk9yRU1SU2l4SWdzdC90a0NVZWhYN0MrcXVLMitpUEREcVBqaDlDQ25TdkVvcjAvcGo4WDMwMjV5eEwrYmcxbE5EMUFDZDE1YW0wcnlzbjByZHp4bXFMdzQzcEJ4QWVZWEU5TDdMV1VSYUdhSGV4Umtsc29XbDloSnNIUDk0MHU1Yzg3OExxQ1NLb0FESTl6bTBBQno0RGlwdmVoSlRkT1JBU1p0b1dES2Z2REwzY3FOWjdFcU02R1BLNnF2QjQwTGtvTjFQbkc5QlM2TUF6MzRXTVRNbW14R2c3Z1FJNjRXY1RHZGhFRXNNNy9ReHNYSVlRTTZKUDNxVFF3YXVyT3dRQjdvc05pTDYwKzFUcWJiV1NKQjkvZk5qL24wVVFoMXdpTkJKS2hRZUlCMlV0VmFGb3dtSjMrTWVSQ3JlMXlNYnVUTDcwWTI0RWlZaThxNmVOTVB6blA1U0pNZTM2My9NSWV4aUxzdlZPZUJabFZtOGlEN09ZM2lqZncwZ1lwMndZVkUxV2JBOHdBN0UrMDBJeGZBajZHWmMwaThhUGtNSk5KUlZob01HRTBRSlVaWk9wbXhOdFhGaTk3MFVuWmF4YUwyWktTWElaYkw2cFJTZGVmS1NRcW1VN0hJaXNtemY4YzkxZDZJem9jR1hsZFB4NWhZT3daajFIbE1LUUg2WS90bzhlVVgwRXFob2ozQVlNSVE5a1NNM0NzcXE5MWFwQ3dwL1VqUUZnRGQyY3BRZ3J1U2cxT2EyMForbEtzM2Z3TDl3NlpNM1M0M2Uwdit3WkRoUzdxWU9tQURwMmxPREpxQXBybXBPSXBFTjRtN2hEeS96VGJYNFZLK1lYdnhWaG9tcjBPSGdBT1MvL2E4OFVReHVCUElzN1F5ZmxNcVRLVEdsVWhta2VXZTk3T3NXMnBQVHRvcmIvZE45L1pWd3FPVXpjMGpmVXZjVXV2SG5rbVd6Mm9NRDI3K21BQ2tmV2xrM2ZoNmdFcXZxRkF1V3Bqem50YVdUeUtYeCtFOXRYTFdxbkl1VlpyS3JrSHRPeTAxUHp4OTRqS2hlRnBzeFVFOCtYdk1OQ3Mwbk5NMHdxODVuYUdRU2diVDlDeFpXVkNnQTFMdmVITFFITEpBY0RmbTZHL0ZLSnAyRnRrNCt6cXdPQlRQZGI2N29ZeE5idXFMOGdHRWdnNTdYQ1owZkExbW13cmJ3cC93Vi95ekVUUFg5aWFZTldwb2NhNzhwd0ZrWitaQ1k3Rm1oNFVIY2dSeXEvdnRLR2Z6eWd6WGlpRmJuRHFDbkpubFlFZXNrQWdzaXB4d3VMY2R0djhiRFFGcHdQTUk1bEVrcnVBWU90dXJUQ1NYTFRzbXBWMzRxR2N0c2VoUVNoUzVvTldQOWVKdFZxV1NNb000ZUVCcldibk9tbGZEbnc9LS0yY0s1Q2MrS0xoSm5xUnZEbWFibkdRPT0%3D--b3e3b9befc4f16b5be2af12c6435ccba58ffedd5", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 2450, "bodySize": 143, "postData": { "mimeType": "application/x-www-form-urlencoded", "text": "utf8=%E2%9C%93&authenticity_token=", "params": [ { "name": "utf8", "value": "%E2%9C%93" }, { "name": "authenticity_token", "value": "%2BIrn3Rf7XixvWY1UURnhtQSCzcG0XSvo7LlaIpyJL9VFDmnVbpF%2BnXNbwse9tvSKUS1yHUj%2FmTZv6meQH4MSqQ%3D%3D" }, { "name": "otp", "value": "737148" } ] } }, "response": { "status": 302, "statusText": "Found", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Server", "value": "GitHub.com" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:59 GMT" }, { "name": "Content-Type", "value": "text/html; charset=utf-8" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Status", "value": "302 Found" }, { "name": "Vary", "value": "X-PJAX" }, { "name": "Location", "value": "https://github.com/login/oauth/authorize?client_id=0246739cfbc9f17c5af6&redirect_uri=https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback&response_type=code&scope=repo&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Set-Cookie", "value": "has_recent_activity=1; path=/; expires=Tue, 22 Oct 2019 03:03:59 -0000" }, { "name": "Set-Cookie", "value": "user_session=fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu; path=/; expires=Tue, 05 Nov 2019 02:03:59 -0000; secure; HttpOnly" }, { "name": "Set-Cookie", "value": "__Host-user_session_same_site=fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu; path=/; expires=Tue, 05 Nov 2019 02:03:59 -0000; secure; HttpOnly; SameSite=Strict" }, { "name": "Set-Cookie", "value": "logged_in=yes; domain=.github.com; path=/; expires=Sat, 22 Oct 2039 03:03:59 -0000; secure; HttpOnly" }, { "name": "Set-Cookie", "value": "dotcom_user=yurm04; domain=.github.com; path=/; expires=Sat, 22 Oct 2039 03:03:59 -0000; secure; HttpOnly" }, { "name": "Set-Cookie", "value": "_gh_sess=ZE84cjM1STZWamcwTExLSGgvb3Y5SVBISWdNa2t3WERmME1sRFNyaUprcHc3bjZWUHY5ZCtOclhCUUQzMkNiQmZQNityanV0N2p3VFhaME1SWjIwbnQvLzhhTW8wSmdidFZEZjdzOEErdWVCSUgrTkRPYUJYa0tkK2pZZDZmUHZOdXpPZFB4a2lBdlBYSzFBSjF4SnZ0dTdQRXc5WGoxZk1XQW56alB3dHdDalZEVVE3V0o2NGNQTUgrVGVZMWtyLS05S1RDSTg0QXpiVDN3U21GSW1DWXl3PT0%3D--bd1a98dfd0ddb436c168aaf41bd38117dcf12b19; path=/; secure; HttpOnly" }, { "name": "X-Request-Id", "value": "664b9130-dbed-4091-a5ad-24e6f28abe9a" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000; includeSubdomains; preload" }, { "name": "X-Frame-Options", "value": "deny" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "X-XSS-Protection", "value": "1; mode=block" }, { "name": "Referrer-Policy", "value": "origin-when-cross-origin, strict-origin-when-cross-origin" }, { "name": "Expect-CT", "value": "max-age=2592000, report-uri=\"https://api.github.com/_private/browser/errors\"" }, { "name": "Content-Security-Policy", "value": "default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; frame-src render.githubusercontent.com; img-src 'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self'; media-src 'none'; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com" }, { "name": "X-GitHub-Request-Id", "value": "DD85:7ABB:8C482:12FB37:5DAE637E" } ], "cookies": [ { "name": "has_recent_activity", "value": "1", "path": "/", "expires": "2019-10-22T03:03:59.000Z", "httpOnly": false, "secure": false }, { "name": "user_session", "value": "fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu", "path": "/", "expires": "2019-11-05T02:03:59.000Z", "httpOnly": true, "secure": true }, { "name": "__Host-user_session_same_site", "value": "fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu", "path": "/", "expires": "2019-11-05T02:03:59.000Z", "httpOnly": true, "secure": true, "sameSite": "Strict" }, { "name": "logged_in", "value": "yes", "path": "/", "domain": ".github.com", "expires": "2039-10-22T03:03:59.000Z", "httpOnly": true, "secure": true }, { "name": "dotcom_user", "value": "yurm04", "path": "/", "domain": ".github.com", "expires": "2039-10-22T03:03:59.000Z", "httpOnly": true, "secure": true }, { "name": "_gh_sess", "value": "ZE84cjM1STZWamcwTExLSGgvb3Y5SVBISWdNa2t3WERmME1sRFNyaUprcHc3bjZWUHY5ZCtOclhCUUQzMkNiQmZQNityanV0N2p3VFhaME1SWjIwbnQvLzhhTW8wSmdidFZEZjdzOEErdWVCSUgrTkRPYUJYa0tkK2pZZDZmUHZOdXpPZFB4a2lBdlBYSzFBSjF4SnZ0dTdQRXc5WGoxZk1XQW56alB3dHdDalZEVVE3V0o2NGNQTUgrVGVZMWtyLS05S1RDSTg0QXpiVDN3U21GSW1DWXl3PT0%3D--bd1a98dfd0ddb436c168aaf41bd38117dcf12b19", "path": "/", "expires": null, "httpOnly": true, "secure": true } ], "content": { "size": 0, "mimeType": "text/html", "compression": 0 }, "redirectURL": "https://github.com/login/oauth/authorize?client_id=0246739cfbc9f17c5af6&redirect_uri=https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback&response_type=code&scope=repo&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "headersSize": 2737, "bodySize": 0, "_transferSize": 2737 }, "cache": {}, "timings": { "blocked": 44.08099999146536, "dns": -1, "ssl": -1, "connect": -1, "send": 0.22799999999999998, "wait": 242.74300000821054, "receive": 5.043000011937693, "_blocked_queueing": 43.41099999146536 }, "serverIPAddress": "192.30.253.113", "_initiator": { "type": "other" }, "_priority": "VeryHigh", "_resourceType": "other", "connection": "386896", "pageref": "page_5" }, { "startedDateTime": "2019-10-22T02:03:59.492Z", "time": 125.50500000361353, "request": { "method": "GET", "url": "https://github.com/login/oauth/authorize?client_id=0246739cfbc9f17c5af6&redirect_uri=https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback&response_type=code&scope=repo&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Host", "value": "github.com" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Pragma", "value": "no-cache" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Sec-Fetch-Mode", "value": "navigate" }, { "name": "Sec-Fetch-User", "value": "?1" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "Sec-Fetch-Site", "value": "same-origin" }, { "name": "Referer", "value": "https://github.com/sessions/two-factor" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Cookie", "value": "has_recent_activity=1; ignored_unsupported_browser_notice=false; _octo=GH1.1.172352075.1571709817; _ga=GA1.2.1816580976.1571709818; _gat=1; tz=America%2FNew_York; _device_id=13e50c3f16d1db048590bb9130505e12; user_session=fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu; __Host-user_session_same_site=fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu; logged_in=yes; dotcom_user=yurm04; _gh_sess=ZE84cjM1STZWamcwTExLSGgvb3Y5SVBISWdNa2t3WERmME1sRFNyaUprcHc3bjZWUHY5ZCtOclhCUUQzMkNiQmZQNityanV0N2p3VFhaME1SWjIwbnQvLzhhTW8wSmdidFZEZjdzOEErdWVCSUgrTkRPYUJYa0tkK2pZZDZmUHZOdXpPZFB4a2lBdlBYSzFBSjF4SnZ0dTdQRXc5WGoxZk1XQW56alB3dHdDalZEVVE3V0o2NGNQTUgrVGVZMWtyLS05S1RDSTg0QXpiVDN3U21GSW1DWXl3PT0%3D--bd1a98dfd0ddb436c168aaf41bd38117dcf12b19" } ], "queryString": [ { "name": "client_id", "value": "0246739cfbc9f17c5af6" }, { "name": "redirect_uri", "value": "https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback" }, { "name": "response_type", "value": "code" }, { "name": "scope", "value": "repo" }, { "name": "state", "value": "er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" } ], "cookies": [ { "name": "has_recent_activity", "value": "1", "expires": null, "httpOnly": false, "secure": false }, { "name": "ignored_unsupported_browser_notice", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "_octo", "value": "GH1.1.172352075.1571709817", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1816580976.1571709818", "expires": null, "httpOnly": false, "secure": false }, { "name": "_gat", "value": "1", "expires": null, "httpOnly": false, "secure": false }, { "name": "tz", "value": "America%2FNew_York", "expires": null, "httpOnly": false, "secure": false }, { "name": "_device_id", "value": "13e50c3f16d1db048590bb9130505e12", "expires": null, "httpOnly": false, "secure": false }, { "name": "user_session", "value": "fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu", "expires": null, "httpOnly": false, "secure": false }, { "name": "__Host-user_session_same_site", "value": "fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu", "expires": null, "httpOnly": false, "secure": false }, { "name": "logged_in", "value": "yes", "expires": null, "httpOnly": false, "secure": false }, { "name": "dotcom_user", "value": "yurm04", "expires": null, "httpOnly": false, "secure": false }, { "name": "_gh_sess", "value": "ZE84cjM1STZWamcwTExLSGgvb3Y5SVBISWdNa2t3WERmME1sRFNyaUprcHc3bjZWUHY5ZCtOclhCUUQzMkNiQmZQNityanV0N2p3VFhaME1SWjIwbnQvLzhhTW8wSmdidFZEZjdzOEErdWVCSUgrTkRPYUJYa0tkK2pZZDZmUHZOdXpPZFB4a2lBdlBYSzFBSjF4SnZ0dTdQRXc5WGoxZk1XQW56alB3dHdDalZEVVE3V0o2NGNQTUgrVGVZMWtyLS05S1RDSTg0QXpiVDN3U21GSW1DWXl3PT0%3D--bd1a98dfd0ddb436c168aaf41bd38117dcf12b19", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 1522, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Server", "value": "GitHub.com" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:59 GMT" }, { "name": "Content-Type", "value": "text/html; charset=utf-8" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Status", "value": "200 OK" }, { "name": "Vary", "value": "X-PJAX" }, { "name": "ETag", "value": "W/\"04c74c25db579a41c39732274184d9ad\"" }, { "name": "Cache-Control", "value": "max-age=0, private, must-revalidate" }, { "name": "Set-Cookie", "value": "user_session=fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu; path=/; expires=Tue, 05 Nov 2019 02:03:59 -0000; secure; HttpOnly" }, { "name": "Set-Cookie", "value": "__Host-user_session_same_site=fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu; path=/; expires=Tue, 05 Nov 2019 02:03:59 -0000; secure; HttpOnly; SameSite=Strict" }, { "name": "Set-Cookie", "value": "has_recent_activity=1; path=/; expires=Tue, 22 Oct 2019 03:03:59 -0000" }, { "name": "Set-Cookie", "value": "_gh_sess=V1doSVJXQWxiTEZHQlVxOUNoRUZCV0s2Y050L0dWUFlrbzRsUHVCRXZLUXZNUXNsRloxU1dneXBxS2hYaEtDYkdxOFVjNGxtcjNYRTZVcjF0dnN5dXRPNmJQNW82VWd1U2xTSHdNOW1QNXl1T1Fud3dCZlg5NjRjRzZ2YVc1NWxlUUtHa0wwRTQ4TUYxS1N1ME1TOFpURlVPZnFqeU9PeWt6Q3o4eXFZeHdBSStOclUrUEV3UXY0QnlHMGlaOEFTLS04SE9JMVRUR0hWWGpRQTQwQmROK013PT0%3D--6f3b2baf6a89a088eda92b2075d960531f6fca89; path=/; secure; HttpOnly" }, { "name": "X-Request-Id", "value": "ad949e82-bbce-45f3-ba7f-27dd746afa9e" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000; includeSubdomains; preload" }, { "name": "X-Frame-Options", "value": "sameorigin" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "X-XSS-Protection", "value": "1; mode=block" }, { "name": "Referrer-Policy", "value": "origin-when-cross-origin, strict-origin-when-cross-origin" }, { "name": "Expect-CT", "value": "max-age=2592000, report-uri=\"https://api.github.com/_private/browser/errors\"" }, { "name": "Content-Security-Policy", "value": "default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com; frame-ancestors 'self'; frame-src render.githubusercontent.com; img-src 'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self'; media-src 'none'; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-GitHub-Request-Id", "value": "DD85:7ABB:8C48D:12FF23:5DAE638F" } ], "cookies": [ { "name": "user_session", "value": "fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu", "path": "/", "expires": "2019-11-05T02:03:59.000Z", "httpOnly": true, "secure": true }, { "name": "__Host-user_session_same_site", "value": "fO_Yi_QtIjlO-NZ3LTkfAuN-by3oclsIZQ6IKkaXLqd-TdXu", "path": "/", "expires": "2019-11-05T02:03:59.000Z", "httpOnly": true, "secure": true, "sameSite": "Strict" }, { "name": "has_recent_activity", "value": "1", "path": "/", "expires": "2019-10-22T03:03:59.000Z", "httpOnly": false, "secure": false }, { "name": "_gh_sess", "value": "V1doSVJXQWxiTEZHQlVxOUNoRUZCV0s2Y050L0dWUFlrbzRsUHVCRXZLUXZNUXNsRloxU1dneXBxS2hYaEtDYkdxOFVjNGxtcjNYRTZVcjF0dnN5dXRPNmJQNW82VWd1U2xTSHdNOW1QNXl1T1Fud3dCZlg5NjRjRzZ2YVc1NWxlUUtHa0wwRTQ4TUYxS1N1ME1TOFpURlVPZnFqeU9PeWt6Q3o4eXFZeHdBSStOclUrUEV3UXY0QnlHMGlaOEFTLS04SE9JMVRUR0hWWGpRQTQwQmROK013PT0%3D--6f3b2baf6a89a088eda92b2075d960531f6fca89", "path": "/", "expires": null, "httpOnly": true, "secure": true } ], "content": { "size": 4087, "mimeType": "text/html", "compression": 2462 }, "redirectURL": "", "headersSize": 2374, "bodySize": 1625, "_transferSize": 3999 }, "cache": {}, "timings": { "blocked": 2.0679999893512577, "dns": -1, "ssl": -1, "connect": -1, "send": 0.31599999999999995, "wait": 120.47600001377799, "receive": 2.6450000004842877, "_blocked_queueing": 1.5159999893512577 }, "serverIPAddress": "192.30.253.113", "_initiator": { "type": "other" }, "_priority": "VeryHigh", "_resourceType": "document", "connection": "386896", "pageref": "page_5" }, { "startedDateTime": "2019-10-22T02:03:42.261Z", "time": 187.72399998852052, "request": { "method": "POST", "url": "https://github.com/session", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Host", "value": "github.com" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Content-Length", "value": "399" }, { "name": "Pragma", "value": "no-cache" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Origin", "value": "https://github.com" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "Content-Type", "value": "application/x-www-form-urlencoded" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Sec-Fetch-Mode", "value": "navigate" }, { "name": "Sec-Fetch-User", "value": "?1" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "Sec-Fetch-Site", "value": "same-origin" }, { "name": "Referer", "value": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Cookie", "value": "has_recent_activity=1; ignored_unsupported_browser_notice=false; _octo=GH1.1.172352075.1571709817; logged_in=no; _gh_sess=dmcrSmNYZEVDOUlpQkpTdHRjbFlndndEQzJMVGJwSDdUVkdtOHloRlhlaWhaNmt1WWh2NCtwZWxJQ0Q4aysyeTl5RXlCczErOWdSYnlDMFRtZGVBWkhuQXVDa216TWxHcUtGSGd6WmZwSjJCeFp4UEYwekh2UzU5ZnJ5ZXViUlJEWVd6KzUxd3dwRkx4dVJHZHo1WFoyQlNoSE9LY01YUnd1ZzFTRmlJTHJQQWZZaDIyazA5SWxCTDJXMnlSVDB6ekNrQjd3Q0daMS94US9qR0hjWFpJVVJjMkx3NHNhN2NDUzc0bnlZK1JFM2pvZDdlVCsyamZKaE1JNDRKU1VVV3ZVWkpNVlZITjJOd3hRU2VONXFSLzJKVyt2b3B1YnZVUitIRUxLL3BIL2NQWmZiVFZMMW80VFR4MVVVYU9pcDVxRWxpOGE5dllHRThJeHYvWUhOYkg3TEo0K0QwbEFLVWw0UTI0U2lnT3UyQzdlQWRqOVdId0dsOG9VM3lCK2kvRGNHVVprb0J3L2xQT0Zzc1l0WGhpeFJPOXEvY1hrWkZRSFZGa1JwbWhHejlCeGN5aDlMa0MxTlMvOEZKLzZPZkRaVDBXa1EwcnZmQm85K055S0RsYUtVWkt1ZjQ3U0FMOUVmSEVvZk9hN2k0QkFHT0RzOXVQb0hmdWVLZlU4dUM5c1k5THJBRjdBL0ZPWmdqOXYza2o5a2ZYZ0s2NVJ5QXd0ZE5kODJUeExtWWpBM0VRcEhzdnRUcGUydXNxelA4Mm5CSklKeUFoaE1TV3g1eDdQT3BScjcxaWxtNWRNeEJhR25nUFh1eFpPRHpEUmdjV1N3UllIZ25OaXh3a2Q0NngySm05WlV6RkxRMnNvSytET0xIajF4bXlDZVQrQ1BDSXdGaGRDbjhwaVRXeVYrZDZOMDFENDk3VjM0VXl1dEdsVGtzZzV0dGd1YWdIMHFERHRCWW5KQ1draEQ5azNPbUUyYVZlcndXeHFwdmFvckNWRFpVRElpMkprMXVMTm1rcnViSnhUam04RFJlaTA5R0JMZ3ltVWVsZ3NiZ3JOV0duRStZVktrdXpmV01qUnltR2JxdWxJL0k2ZGo1VGcwVDlQWWIxdVZSU2ZWdCtVc0dpSUNVdXk2Tnh6cDhuOTFPQWdwWkc3cHJwSEN5VTNJYkhrVUdZUW5VaDFUdDZiazRPN3p2V1U4K1ZQQkR3NmlJLzIrUW1EdFl3bVI1OXVhQ1FFcFpTVmhwNW5sbEVhN0xmQVR0U0NLRWQrZXBQQjlKLS1YeXY2VlRZdi93cWNSb1FidDVWRWtnPT0%3D--4f0cf54fa2c555171f6aedf18f3c147a6035939b; _ga=GA1.2.1816580976.1571709818; _gat=1; tz=America%2FNew_York" } ], "queryString": [], "cookies": [ { "name": "has_recent_activity", "value": "1", "expires": null, "httpOnly": false, "secure": false }, { "name": "ignored_unsupported_browser_notice", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "_octo", "value": "GH1.1.172352075.1571709817", "expires": null, "httpOnly": false, "secure": false }, { "name": "logged_in", "value": "no", "expires": null, "httpOnly": false, "secure": false }, { "name": "_gh_sess", "value": "dmcrSmNYZEVDOUlpQkpTdHRjbFlndndEQzJMVGJwSDdUVkdtOHloRlhlaWhaNmt1WWh2NCtwZWxJQ0Q4aysyeTl5RXlCczErOWdSYnlDMFRtZGVBWkhuQXVDa216TWxHcUtGSGd6WmZwSjJCeFp4UEYwekh2UzU5ZnJ5ZXViUlJEWVd6KzUxd3dwRkx4dVJHZHo1WFoyQlNoSE9LY01YUnd1ZzFTRmlJTHJQQWZZaDIyazA5SWxCTDJXMnlSVDB6ekNrQjd3Q0daMS94US9qR0hjWFpJVVJjMkx3NHNhN2NDUzc0bnlZK1JFM2pvZDdlVCsyamZKaE1JNDRKU1VVV3ZVWkpNVlZITjJOd3hRU2VONXFSLzJKVyt2b3B1YnZVUitIRUxLL3BIL2NQWmZiVFZMMW80VFR4MVVVYU9pcDVxRWxpOGE5dllHRThJeHYvWUhOYkg3TEo0K0QwbEFLVWw0UTI0U2lnT3UyQzdlQWRqOVdId0dsOG9VM3lCK2kvRGNHVVprb0J3L2xQT0Zzc1l0WGhpeFJPOXEvY1hrWkZRSFZGa1JwbWhHejlCeGN5aDlMa0MxTlMvOEZKLzZPZkRaVDBXa1EwcnZmQm85K055S0RsYUtVWkt1ZjQ3U0FMOUVmSEVvZk9hN2k0QkFHT0RzOXVQb0hmdWVLZlU4dUM5c1k5THJBRjdBL0ZPWmdqOXYza2o5a2ZYZ0s2NVJ5QXd0ZE5kODJUeExtWWpBM0VRcEhzdnRUcGUydXNxelA4Mm5CSklKeUFoaE1TV3g1eDdQT3BScjcxaWxtNWRNeEJhR25nUFh1eFpPRHpEUmdjV1N3UllIZ25OaXh3a2Q0NngySm05WlV6RkxRMnNvSytET0xIajF4bXlDZVQrQ1BDSXdGaGRDbjhwaVRXeVYrZDZOMDFENDk3VjM0VXl1dEdsVGtzZzV0dGd1YWdIMHFERHRCWW5KQ1draEQ5azNPbUUyYVZlcndXeHFwdmFvckNWRFpVRElpMkprMXVMTm1rcnViSnhUam04RFJlaTA5R0JMZ3ltVWVsZ3NiZ3JOV0duRStZVktrdXpmV01qUnltR2JxdWxJL0k2ZGo1VGcwVDlQWWIxdVZSU2ZWdCtVc0dpSUNVdXk2Tnh6cDhuOTFPQWdwWkc3cHJwSEN5VTNJYkhrVUdZUW5VaDFUdDZiazRPN3p2V1U4K1ZQQkR3NmlJLzIrUW1EdFl3bVI1OXVhQ1FFcFpTVmhwNW5sbEVhN0xmQVR0U0NLRWQrZXBQQjlKLS1YeXY2VlRZdi93cWNSb1FidDVWRWtnPT0%3D--4f0cf54fa2c555171f6aedf18f3c147a6035939b", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1816580976.1571709818", "expires": null, "httpOnly": false, "secure": false }, { "name": "_gat", "value": "1", "expires": null, "httpOnly": false, "secure": false }, { "name": "tz", "value": "America%2FNew_York", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 2508, "bodySize": 399, "postData": { "mimeType": "application/x-www-form-urlencoded", "text": "commit=Sign+in&utf8=%E2%9C%93&authenticity_token=", "params": [ { "name": "commit", "value": "Sign+in" }, { "name": "utf8", "value": "%E2%9C%93" }, { "name": "authenticity_token", "value": "PkxlFzWJ8w%2Bp9Q80JYdUfneMtAqJGBVIsQalaKWEYH3eL4txZFzn287n%2BuwzxOduUnPKmfBgVYKJpH%2FR%2BrXvEw%3D%3D" }, { "name": "ga_id", "value": "1816580976.1571709818" }, { "name": "login", "value": "yurm04" }, { "name": "password", "value": "" }, { "name": "webauthn-support", "value": "supported" }, { "name": "webauthn-iuvpaa-support", "value": "supported" }, { "name": "required_field_5fd0", "value": "" }, { "name": "timestamp", "value": "1571709817131" }, { "name": "timestamp_secret", "value": "714d9fca2062919a0c02953eb6f1cfcd348c10efb84601b05fdf4cae8f224bd2" } ] } }, "response": { "status": 302, "statusText": "Found", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Server", "value": "GitHub.com" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:42 GMT" }, { "name": "Content-Type", "value": "text/html; charset=utf-8" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Status", "value": "302 Found" }, { "name": "Vary", "value": "X-PJAX" }, { "name": "Location", "value": "https://github.com/sessions/two-factor" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Set-Cookie", "value": "has_recent_activity=1; path=/; expires=Tue, 22 Oct 2019 03:03:42 -0000" }, { "name": "Set-Cookie", "value": "_device_id=13e50c3f16d1db048590bb9130505e12; path=/; expires=Sat, 22 Oct 2039 03:03:42 -0000; secure; HttpOnly" }, { "name": "Set-Cookie", "value": "_gh_sess=cjRkSGo0b0laUHZhTDYxdzJNdzMzT1VvUXluNHNidXhGMXlNYUM3WkIvazRhS00yeGNsSFZnc2ZlcTBzNTU4bFo3NmtnSCs1VlRPOXdLdWZrSmNQSUl6d1pseGladnVQY2JEWmp2KytWbmN6V2RPS3VTN1VJZjJCUGxOQ21pZHp6c1dWUXoxeGl0azVQbVJlZXdLNFJxelBTZG1VdytTSHYrQktBSlVQZS9xYlJnak1WRzRkNkZILytMYWpROUduTlk2ODFWTEFzVWxVeUREeTBzeFg0cEdlTDA4YUtaRDRrazc0S2NXb3J1a1lZU2F1MkFDanZLdS81VzNCOGFQUWY4RU5vcjhSVDBzOHBZemYzQytvdDh6bm1lSERPV0M1MzFTemFmczlsWFZxRlU2NG1ZU2l1eStSSTA3ZXFOL29keGVTWG40K3ZMbnZxcnJEdjlUMWcxdGZZTldsTnYvcHZWMmw4OC9oKzN6V1F2OWRvTXFzS244UlIzd3hISnlqb2hIZ3RCcnhZVGMzK0JxYVJwZjZKNHlyeTE2cGlndmFqVDdzZCtTdkY4UXFJOStnSmt3WTYreEJGMWR3c2tKeUxNdWZheEFzcHp2cjVIQXppSmVzUVczbjRVeENZZjJKcWxTYzhSS1FjTW9JTWlERW9jZUh2TlNZS1R6cWJqTDFGV050YXRSM0hUbmlDaklWZldqSGRXQ2x1VUpNRXFWc2RKRnY5amprOU93RUpsZHI4d2J3cUNsVUEyc005UjFKNnN4LzBYU2s3d3JKaEVwVzNtYkNlQngyckJuYUYzT2FRQzJseWN4LzRDV2t6Tk1RbDZaRU82NExrK1pxa0NUZnJmdEhHOGl1VTBiamgrUkJnZ2Zyc2xUdG5sQ3dtdDBrU050ZHZzL1ZnSm89LS1TMnRPaGxMa0FXQkc0NmZGVlBRemxBPT0%3D--f4b77a122186d17fe41469d661ac650d65f22c8f; path=/; secure; HttpOnly" }, { "name": "X-Request-Id", "value": "1b6c153e-4618-4494-9d12-015ea68cc3a1" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000; includeSubdomains; preload" }, { "name": "X-Frame-Options", "value": "deny" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "X-XSS-Protection", "value": "1; mode=block" }, { "name": "Referrer-Policy", "value": "origin-when-cross-origin, strict-origin-when-cross-origin" }, { "name": "Expect-CT", "value": "max-age=2592000, report-uri=\"https://api.github.com/_private/browser/errors\"" }, { "name": "Content-Security-Policy", "value": "default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; frame-src render.githubusercontent.com; img-src 'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self'; media-src 'none'; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com" }, { "name": "X-GitHub-Request-Id", "value": "DD85:7ABB:8C2C8:12F9E7:5DAE6379" } ], "cookies": [ { "name": "has_recent_activity", "value": "1", "path": "/", "expires": "2019-10-22T03:03:42.000Z", "httpOnly": false, "secure": false }, { "name": "_device_id", "value": "13e50c3f16d1db048590bb9130505e12", "path": "/", "expires": "2039-10-22T03:03:42.000Z", "httpOnly": true, "secure": true }, { "name": "_gh_sess", "value": "cjRkSGo0b0laUHZhTDYxdzJNdzMzT1VvUXluNHNidXhGMXlNYUM3WkIvazRhS00yeGNsSFZnc2ZlcTBzNTU4bFo3NmtnSCs1VlRPOXdLdWZrSmNQSUl6d1pseGladnVQY2JEWmp2KytWbmN6V2RPS3VTN1VJZjJCUGxOQ21pZHp6c1dWUXoxeGl0azVQbVJlZXdLNFJxelBTZG1VdytTSHYrQktBSlVQZS9xYlJnak1WRzRkNkZILytMYWpROUduTlk2ODFWTEFzVWxVeUREeTBzeFg0cEdlTDA4YUtaRDRrazc0S2NXb3J1a1lZU2F1MkFDanZLdS81VzNCOGFQUWY4RU5vcjhSVDBzOHBZemYzQytvdDh6bm1lSERPV0M1MzFTemFmczlsWFZxRlU2NG1ZU2l1eStSSTA3ZXFOL29keGVTWG40K3ZMbnZxcnJEdjlUMWcxdGZZTldsTnYvcHZWMmw4OC9oKzN6V1F2OWRvTXFzS244UlIzd3hISnlqb2hIZ3RCcnhZVGMzK0JxYVJwZjZKNHlyeTE2cGlndmFqVDdzZCtTdkY4UXFJOStnSmt3WTYreEJGMWR3c2tKeUxNdWZheEFzcHp2cjVIQXppSmVzUVczbjRVeENZZjJKcWxTYzhSS1FjTW9JTWlERW9jZUh2TlNZS1R6cWJqTDFGV050YXRSM0hUbmlDaklWZldqSGRXQ2x1VUpNRXFWc2RKRnY5amprOU93RUpsZHI4d2J3cUNsVUEyc005UjFKNnN4LzBYU2s3d3JKaEVwVzNtYkNlQngyckJuYUYzT2FRQzJseWN4LzRDV2t6Tk1RbDZaRU82NExrK1pxa0NUZnJmdEhHOGl1VTBiamgrUkJnZ2Zyc2xUdG5sQ3dtdDBrU050ZHZzL1ZnSm89LS1TMnRPaGxMa0FXQkc0NmZGVlBRemxBPT0%3D--f4b77a122186d17fe41469d661ac650d65f22c8f", "path": "/", "expires": null, "httpOnly": true, "secure": true } ], "content": { "size": 0, "mimeType": "text/html", "compression": 0 }, "redirectURL": "https://github.com/sessions/two-factor", "headersSize": 2791, "bodySize": 0, "_transferSize": 2791 }, "cache": {}, "timings": { "blocked": 3.69099999903515, "dns": -1, "ssl": -1, "connect": -1, "send": 0.20600000000000002, "wait": 179.52399999523348, "receive": 4.302999994251877, "_blocked_queueing": 3.26399999903515 }, "serverIPAddress": "192.30.253.113", "_initiator": { "type": "other" }, "_priority": "VeryHigh", "_resourceType": "other", "connection": "386896", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:42.448Z", "time": 451.8979999993462, "request": { "method": "GET", "url": "https://github.com/sessions/two-factor", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Host", "value": "github.com" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Pragma", "value": "no-cache" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Sec-Fetch-Mode", "value": "navigate" }, { "name": "Sec-Fetch-User", "value": "?1" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "Sec-Fetch-Site", "value": "same-origin" }, { "name": "Referer", "value": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Cookie", "value": "has_recent_activity=1; ignored_unsupported_browser_notice=false; _octo=GH1.1.172352075.1571709817; logged_in=no; _ga=GA1.2.1816580976.1571709818; _gat=1; tz=America%2FNew_York; _device_id=13e50c3f16d1db048590bb9130505e12; _gh_sess=cjRkSGo0b0laUHZhTDYxdzJNdzMzT1VvUXluNHNidXhGMXlNYUM3WkIvazRhS00yeGNsSFZnc2ZlcTBzNTU4bFo3NmtnSCs1VlRPOXdLdWZrSmNQSUl6d1pseGladnVQY2JEWmp2KytWbmN6V2RPS3VTN1VJZjJCUGxOQ21pZHp6c1dWUXoxeGl0azVQbVJlZXdLNFJxelBTZG1VdytTSHYrQktBSlVQZS9xYlJnak1WRzRkNkZILytMYWpROUduTlk2ODFWTEFzVWxVeUREeTBzeFg0cEdlTDA4YUtaRDRrazc0S2NXb3J1a1lZU2F1MkFDanZLdS81VzNCOGFQUWY4RU5vcjhSVDBzOHBZemYzQytvdDh6bm1lSERPV0M1MzFTemFmczlsWFZxRlU2NG1ZU2l1eStSSTA3ZXFOL29keGVTWG40K3ZMbnZxcnJEdjlUMWcxdGZZTldsTnYvcHZWMmw4OC9oKzN6V1F2OWRvTXFzS244UlIzd3hISnlqb2hIZ3RCcnhZVGMzK0JxYVJwZjZKNHlyeTE2cGlndmFqVDdzZCtTdkY4UXFJOStnSmt3WTYreEJGMWR3c2tKeUxNdWZheEFzcHp2cjVIQXppSmVzUVczbjRVeENZZjJKcWxTYzhSS1FjTW9JTWlERW9jZUh2TlNZS1R6cWJqTDFGV050YXRSM0hUbmlDaklWZldqSGRXQ2x1VUpNRXFWc2RKRnY5amprOU93RUpsZHI4d2J3cUNsVUEyc005UjFKNnN4LzBYU2s3d3JKaEVwVzNtYkNlQngyckJuYUYzT2FRQzJseWN4LzRDV2t6Tk1RbDZaRU82NExrK1pxa0NUZnJmdEhHOGl1VTBiamgrUkJnZ2Zyc2xUdG5sQ3dtdDBrU050ZHZzL1ZnSm89LS1TMnRPaGxMa0FXQkc0NmZGVlBRemxBPT0%3D--f4b77a122186d17fe41469d661ac650d65f22c8f" } ], "queryString": [], "cookies": [ { "name": "has_recent_activity", "value": "1", "expires": null, "httpOnly": false, "secure": false }, { "name": "ignored_unsupported_browser_notice", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "_octo", "value": "GH1.1.172352075.1571709817", "expires": null, "httpOnly": false, "secure": false }, { "name": "logged_in", "value": "no", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1816580976.1571709818", "expires": null, "httpOnly": false, "secure": false }, { "name": "_gat", "value": "1", "expires": null, "httpOnly": false, "secure": false }, { "name": "tz", "value": "America%2FNew_York", "expires": null, "httpOnly": false, "secure": false }, { "name": "_device_id", "value": "13e50c3f16d1db048590bb9130505e12", "expires": null, "httpOnly": false, "secure": false }, { "name": "_gh_sess", "value": "cjRkSGo0b0laUHZhTDYxdzJNdzMzT1VvUXluNHNidXhGMXlNYUM3WkIvazRhS00yeGNsSFZnc2ZlcTBzNTU4bFo3NmtnSCs1VlRPOXdLdWZrSmNQSUl6d1pseGladnVQY2JEWmp2KytWbmN6V2RPS3VTN1VJZjJCUGxOQ21pZHp6c1dWUXoxeGl0azVQbVJlZXdLNFJxelBTZG1VdytTSHYrQktBSlVQZS9xYlJnak1WRzRkNkZILytMYWpROUduTlk2ODFWTEFzVWxVeUREeTBzeFg0cEdlTDA4YUtaRDRrazc0S2NXb3J1a1lZU2F1MkFDanZLdS81VzNCOGFQUWY4RU5vcjhSVDBzOHBZemYzQytvdDh6bm1lSERPV0M1MzFTemFmczlsWFZxRlU2NG1ZU2l1eStSSTA3ZXFOL29keGVTWG40K3ZMbnZxcnJEdjlUMWcxdGZZTldsTnYvcHZWMmw4OC9oKzN6V1F2OWRvTXFzS244UlIzd3hISnlqb2hIZ3RCcnhZVGMzK0JxYVJwZjZKNHlyeTE2cGlndmFqVDdzZCtTdkY4UXFJOStnSmt3WTYreEJGMWR3c2tKeUxNdWZheEFzcHp2cjVIQXppSmVzUVczbjRVeENZZjJKcWxTYzhSS1FjTW9JTWlERW9jZUh2TlNZS1R6cWJqTDFGV050YXRSM0hUbmlDaklWZldqSGRXQ2x1VUpNRXFWc2RKRnY5amprOU93RUpsZHI4d2J3cUNsVUEyc005UjFKNnN4LzBYU2s3d3JKaEVwVzNtYkNlQngyckJuYUYzT2FRQzJseWN4LzRDV2t6Tk1RbDZaRU82NExrK1pxa0NUZnJmdEhHOGl1VTBiamgrUkJnZ2Zyc2xUdG5sQ3dtdDBrU050ZHZzL1ZnSm89LS1TMnRPaGxMa0FXQkc0NmZGVlBRemxBPT0%3D--f4b77a122186d17fe41469d661ac650d65f22c8f", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 2098, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Server", "value": "GitHub.com" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:42 GMT" }, { "name": "Content-Type", "value": "text/html; charset=utf-8" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Status", "value": "200 OK" }, { "name": "Vary", "value": "X-PJAX" }, { "name": "ETag", "value": "W/\"40e0b76ad574471e2de51ce1a1f6fe6b\"" }, { "name": "Cache-Control", "value": "max-age=0, private, must-revalidate" }, { "name": "Set-Cookie", "value": "has_recent_activity=1; path=/; expires=Tue, 22 Oct 2019 03:03:42 -0000" }, { "name": "Set-Cookie", "value": "_gh_sess=Mk9yRU1SU2l4SWdzdC90a0NVZWhYN0MrcXVLMitpUEREcVBqaDlDQ25TdkVvcjAvcGo4WDMwMjV5eEwrYmcxbE5EMUFDZDE1YW0wcnlzbjByZHp4bXFMdzQzcEJ4QWVZWEU5TDdMV1VSYUdhSGV4Umtsc29XbDloSnNIUDk0MHU1Yzg3OExxQ1NLb0FESTl6bTBBQno0RGlwdmVoSlRkT1JBU1p0b1dES2Z2REwzY3FOWjdFcU02R1BLNnF2QjQwTGtvTjFQbkc5QlM2TUF6MzRXTVRNbW14R2c3Z1FJNjRXY1RHZGhFRXNNNy9ReHNYSVlRTTZKUDNxVFF3YXVyT3dRQjdvc05pTDYwKzFUcWJiV1NKQjkvZk5qL24wVVFoMXdpTkJKS2hRZUlCMlV0VmFGb3dtSjMrTWVSQ3JlMXlNYnVUTDcwWTI0RWlZaThxNmVOTVB6blA1U0pNZTM2My9NSWV4aUxzdlZPZUJabFZtOGlEN09ZM2lqZncwZ1lwMndZVkUxV2JBOHdBN0UrMDBJeGZBajZHWmMwaThhUGtNSk5KUlZob01HRTBRSlVaWk9wbXhOdFhGaTk3MFVuWmF4YUwyWktTWElaYkw2cFJTZGVmS1NRcW1VN0hJaXNtemY4YzkxZDZJem9jR1hsZFB4NWhZT3daajFIbE1LUUg2WS90bzhlVVgwRXFob2ozQVlNSVE5a1NNM0NzcXE5MWFwQ3dwL1VqUUZnRGQyY3BRZ3J1U2cxT2EyMForbEtzM2Z3TDl3NlpNM1M0M2Uwdit3WkRoUzdxWU9tQURwMmxPREpxQXBybXBPSXBFTjRtN2hEeS96VGJYNFZLK1lYdnhWaG9tcjBPSGdBT1MvL2E4OFVReHVCUElzN1F5ZmxNcVRLVEdsVWhta2VXZTk3T3NXMnBQVHRvcmIvZE45L1pWd3FPVXpjMGpmVXZjVXV2SG5rbVd6Mm9NRDI3K21BQ2tmV2xrM2ZoNmdFcXZxRkF1V3Bqem50YVdUeUtYeCtFOXRYTFdxbkl1VlpyS3JrSHRPeTAxUHp4OTRqS2hlRnBzeFVFOCtYdk1OQ3Mwbk5NMHdxODVuYUdRU2diVDlDeFpXVkNnQTFMdmVITFFITEpBY0RmbTZHL0ZLSnAyRnRrNCt6cXdPQlRQZGI2N29ZeE5idXFMOGdHRWdnNTdYQ1owZkExbW13cmJ3cC93Vi95ekVUUFg5aWFZTldwb2NhNzhwd0ZrWitaQ1k3Rm1oNFVIY2dSeXEvdnRLR2Z6eWd6WGlpRmJuRHFDbkpubFlFZXNrQWdzaXB4d3VMY2R0djhiRFFGcHdQTUk1bEVrcnVBWU90dXJUQ1NYTFRzbXBWMzRxR2N0c2VoUVNoUzVvTldQOWVKdFZxV1NNb000ZUVCcldibk9tbGZEbnc9LS0yY0s1Q2MrS0xoSm5xUnZEbWFibkdRPT0%3D--b3e3b9befc4f16b5be2af12c6435ccba58ffedd5; path=/; secure; HttpOnly" }, { "name": "X-Request-Id", "value": "7b276e9d-9963-412d-bc71-f65323609cdc" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000; includeSubdomains; preload" }, { "name": "X-Frame-Options", "value": "deny" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "X-XSS-Protection", "value": "1; mode=block" }, { "name": "Referrer-Policy", "value": "origin-when-cross-origin, strict-origin-when-cross-origin" }, { "name": "Expect-CT", "value": "max-age=2592000, report-uri=\"https://api.github.com/_private/browser/errors\"" }, { "name": "Content-Security-Policy", "value": "default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; frame-src render.githubusercontent.com; img-src 'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self'; media-src 'none'; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-GitHub-Request-Id", "value": "DD85:7ABB:8C2CB:12FB25:5DAE637E" } ], "cookies": [ { "name": "has_recent_activity", "value": "1", "path": "/", "expires": "2019-10-22T03:03:42.000Z", "httpOnly": false, "secure": false }, { "name": "_gh_sess", "value": "Mk9yRU1SU2l4SWdzdC90a0NVZWhYN0MrcXVLMitpUEREcVBqaDlDQ25TdkVvcjAvcGo4WDMwMjV5eEwrYmcxbE5EMUFDZDE1YW0wcnlzbjByZHp4bXFMdzQzcEJ4QWVZWEU5TDdMV1VSYUdhSGV4Umtsc29XbDloSnNIUDk0MHU1Yzg3OExxQ1NLb0FESTl6bTBBQno0RGlwdmVoSlRkT1JBU1p0b1dES2Z2REwzY3FOWjdFcU02R1BLNnF2QjQwTGtvTjFQbkc5QlM2TUF6MzRXTVRNbW14R2c3Z1FJNjRXY1RHZGhFRXNNNy9ReHNYSVlRTTZKUDNxVFF3YXVyT3dRQjdvc05pTDYwKzFUcWJiV1NKQjkvZk5qL24wVVFoMXdpTkJKS2hRZUlCMlV0VmFGb3dtSjMrTWVSQ3JlMXlNYnVUTDcwWTI0RWlZaThxNmVOTVB6blA1U0pNZTM2My9NSWV4aUxzdlZPZUJabFZtOGlEN09ZM2lqZncwZ1lwMndZVkUxV2JBOHdBN0UrMDBJeGZBajZHWmMwaThhUGtNSk5KUlZob01HRTBRSlVaWk9wbXhOdFhGaTk3MFVuWmF4YUwyWktTWElaYkw2cFJTZGVmS1NRcW1VN0hJaXNtemY4YzkxZDZJem9jR1hsZFB4NWhZT3daajFIbE1LUUg2WS90bzhlVVgwRXFob2ozQVlNSVE5a1NNM0NzcXE5MWFwQ3dwL1VqUUZnRGQyY3BRZ3J1U2cxT2EyMForbEtzM2Z3TDl3NlpNM1M0M2Uwdit3WkRoUzdxWU9tQURwMmxPREpxQXBybXBPSXBFTjRtN2hEeS96VGJYNFZLK1lYdnhWaG9tcjBPSGdBT1MvL2E4OFVReHVCUElzN1F5ZmxNcVRLVEdsVWhta2VXZTk3T3NXMnBQVHRvcmIvZE45L1pWd3FPVXpjMGpmVXZjVXV2SG5rbVd6Mm9NRDI3K21BQ2tmV2xrM2ZoNmdFcXZxRkF1V3Bqem50YVdUeUtYeCtFOXRYTFdxbkl1VlpyS3JrSHRPeTAxUHp4OTRqS2hlRnBzeFVFOCtYdk1OQ3Mwbk5NMHdxODVuYUdRU2diVDlDeFpXVkNnQTFMdmVITFFITEpBY0RmbTZHL0ZLSnAyRnRrNCt6cXdPQlRQZGI2N29ZeE5idXFMOGdHRWdnNTdYQ1owZkExbW13cmJ3cC93Vi95ekVUUFg5aWFZTldwb2NhNzhwd0ZrWitaQ1k3Rm1oNFVIY2dSeXEvdnRLR2Z6eWd6WGlpRmJuRHFDbkpubFlFZXNrQWdzaXB4d3VMY2R0djhiRFFGcHdQTUk1bEVrcnVBWU90dXJUQ1NYTFRzbXBWMzRxR2N0c2VoUVNoUzVvTldQOWVKdFZxV1NNb000ZUVCcldibk9tbGZEbnc9LS0yY0s1Q2MrS0xoSm5xUnZEbWFibkdRPT0%3D--b3e3b9befc4f16b5be2af12c6435ccba58ffedd5", "path": "/", "expires": null, "httpOnly": true, "secure": true } ], "content": { "size": 16234, "mimeType": "text/html", "compression": 10475 }, "redirectURL": "", "headersSize": 3218, "bodySize": 5759, "_transferSize": 8977 }, "cache": {}, "timings": { "blocked": 1.74700001639314, "dns": -1, "ssl": -1, "connect": -1, "send": 0.22499999999999998, "wait": 447.69400001314466, "receive": 2.2319999698083848, "_blocked_queueing": 1.25200001639314 }, "serverIPAddress": "192.30.253.113", "_initiator": { "type": "other" }, "_priority": "VeryHigh", "_resourceType": "document", "connection": "386896", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:36.675Z", "time": 282.80899999663234, "request": { "method": "GET", "url": "https://chronicler-notes.auth0.com/authorize?client_id=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&connection=github&sso=true&_intstate=deprecated&_csrf=2L9iIyGy-WLYoA0eGQu3HVnu7abAP8lxBJ_4&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIiwiZW52Ijp7ImxvY2suanMtdWxwIjoiMTEuMTYuMyIsImF1dGgwLmpzLXVscCI6IjkuMTEuMiIsImF1dGgwLmpzIjoiOS4xMS4yIn19&protocol=oauth2", "httpVersion": "http/2.0", "headers": [ { "name": ":method", "value": "GET" }, { "name": ":authority", "value": "chronicler-notes.auth0.com" }, { "name": ":scheme", "value": "https" }, { "name": ":path", "value": "/authorize?client_id=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&connection=github&sso=true&_intstate=deprecated&_csrf=2L9iIyGy-WLYoA0eGQu3HVnu7abAP8lxBJ_4&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIiwiZW52Ijp7ImxvY2suanMtdWxwIjoiMTEuMTYuMyIsImF1dGgwLmpzLXVscCI6IjkuMTEuMiIsImF1dGgwLmpzIjoiOS4xMS4yIn19&protocol=oauth2" }, { "name": "pragma", "value": "no-cache" }, { "name": "cache-control", "value": "no-cache" }, { "name": "upgrade-insecure-requests", "value": "1" }, { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "sec-fetch-mode", "value": "navigate" }, { "name": "sec-fetch-user", "value": "?1" }, { "name": "accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "sec-fetch-site", "value": "same-origin" }, { "name": "referer", "value": "https://chronicler-notes.auth0.com/login?state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&client=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&protocol=oauth2&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D" }, { "name": "accept-encoding", "value": "gzip, deflate, br" }, { "name": "accept-language", "value": "en-US,en;q=0.9" }, { "name": "cookie", "value": "did=s%3Av0%3A266b46f0-f470-11e9-8f7b-cb565543c93e.X09l8PyUb6gA0QwBwyCsKIsLMW5tyys33hPWbLfUFbw; auth0=s%3AMrkxPRFdjc-GFRfpkUIcrrIdGjGVP_x2.%2FizR%2F1Jt1Ekk8iVfSmzlRY52HiDOO7HXFDQqJxXH2Fg" } ], "queryString": [ { "name": "client_id", "value": "1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe" }, { "name": "response_type", "value": "token%20id_token" }, { "name": "redirect_uri", "value": "http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback" }, { "name": "scope", "value": "openid%20profile%20email" }, { "name": "state", "value": "g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU" }, { "name": "nonce", "value": "z94ilIM3Ks130SAvt9MZusSdL2xpnT2J" }, { "name": "connection", "value": "github" }, { "name": "sso", "value": "true" }, { "name": "_intstate", "value": "deprecated" }, { "name": "_csrf", "value": "2L9iIyGy-WLYoA0eGQu3HVnu7abAP8lxBJ_4" }, { "name": "audience", "value": "https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo" }, { "name": "auth0Client", "value": "eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIiwiZW52Ijp7ImxvY2suanMtdWxwIjoiMTEuMTYuMyIsImF1dGgwLmpzLXVscCI6IjkuMTEuMiIsImF1dGgwLmpzIjoiOS4xMS4yIn19" }, { "name": "protocol", "value": "oauth2" } ], "cookies": [ { "name": "did", "value": "s%3Av0%3A266b46f0-f470-11e9-8f7b-cb565543c93e.X09l8PyUb6gA0QwBwyCsKIsLMW5tyys33hPWbLfUFbw", "expires": null, "httpOnly": false, "secure": false }, { "name": "auth0", "value": "s%3AMrkxPRFdjc-GFRfpkUIcrrIdGjGVP_x2.%2FizR%2F1Jt1Ekk8iVfSmzlRY52HiDOO7HXFDQqJxXH2Fg", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": -1, "bodySize": 0 }, "response": { "status": 302, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "status", "value": "302" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:36 GMT" }, { "name": "content-length", "value": "0" }, { "name": "location", "value": "https://github.com/login/oauth/authorize?response_type=code&redirect_uri=https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback&scope=repo&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq&client_id=0246739cfbc9f17c5af6" }, { "name": "server", "value": "nginx" }, { "name": "ot-tracer-spanid", "value": "2f1e85df6dcf4588" }, { "name": "ot-tracer-traceid", "value": "6605c9cd7d47a650" }, { "name": "ot-tracer-sampled", "value": "true" }, { "name": "x-auth0-requestid", "value": "f3092a081af5c26abbee" }, { "name": "cache-control", "value": "private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-transform" }, { "name": "strict-transport-security", "value": "max-age=15724800" }, { "name": "x-robots-tag", "value": "noindex, nofollow, nosnippet, noarchive" } ], "cookies": [], "content": { "size": 0, "mimeType": "x-unknown" }, "redirectURL": "https://github.com/login/oauth/authorize?response_type=code&redirect_uri=https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback&scope=repo&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq&client_id=0246739cfbc9f17c5af6", "headersSize": -1, "bodySize": -1, "_transferSize": 456 }, "cache": {}, "timings": { "blocked": 6.271999990707263, "dns": -1, "ssl": -1, "connect": -1, "send": 0.21299999999999997, "wait": 273.07900000604616, "receive": 3.244999999878928, "_blocked_queueing": 5.796999990707263 }, "serverIPAddress": "54.187.133.135", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "F", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 192870 }, { "functionName": "Ft.authorize", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 291791 }, { "functionName": "t.logIn", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 605484 }, { "functionName": "t.logIn", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 117607 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 95657 }, { "functionName": "g", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 95463 }, { "functionName": "d", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 95635 }, { "functionName": "o", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 139384 }, { "functionName": "e.handleSubmit", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 137900 }, { "functionName": "onClick", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 138414 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 183899 }, { "functionName": "a", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 179994 }, { "functionName": "s", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 180209 }, { "functionName": "g", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 127228 }, { "functionName": "h", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 127354 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 548299 }, { "functionName": "processEventQueue", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 128416 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 773671 }, { "functionName": "handleTopLevel", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 773741 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 774194 }, { "functionName": "perform", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 148478 }, { "functionName": "batchedUpdates", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 772470 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 100044 }, { "functionName": "dispatchEvent", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 775046 } ] } }, "_priority": "VeryHigh", "_resourceType": "other", "connection": "386837", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:36.958Z", "time": 169.2259999922756, "request": { "method": "GET", "url": "https://github.com/login/oauth/authorize?response_type=code&redirect_uri=https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback&scope=repo&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq&client_id=0246739cfbc9f17c5af6", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Host", "value": "github.com" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Pragma", "value": "no-cache" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Sec-Fetch-Mode", "value": "navigate" }, { "name": "Sec-Fetch-User", "value": "?1" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "Sec-Fetch-Site", "value": "cross-site" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" } ], "queryString": [ { "name": "response_type", "value": "code" }, { "name": "redirect_uri", "value": "https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback" }, { "name": "scope", "value": "repo" }, { "name": "state", "value": "er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" }, { "name": "client_id", "value": "0246739cfbc9f17c5af6" } ], "cookies": [], "headersSize": 731, "bodySize": 0 }, "response": { "status": 302, "statusText": "Found", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Server", "value": "GitHub.com" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:37 GMT" }, { "name": "Content-Type", "value": "text/html; charset=utf-8" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Status", "value": "302 Found" }, { "name": "Vary", "value": "X-PJAX" }, { "name": "Location", "value": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Set-Cookie", "value": "has_recent_activity=1; path=/; expires=Tue, 22 Oct 2019 03:03:37 -0000" }, { "name": "Set-Cookie", "value": "ignored_unsupported_browser_notice=false; path=/" }, { "name": "X-Request-Id", "value": "e9b24b82-9806-48d1-a17e-bc52216171c2" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000; includeSubdomains; preload" }, { "name": "X-Frame-Options", "value": "deny" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "X-XSS-Protection", "value": "1; mode=block" }, { "name": "Referrer-Policy", "value": "origin-when-cross-origin, strict-origin-when-cross-origin" }, { "name": "Expect-CT", "value": "max-age=2592000, report-uri=\"https://api.github.com/_private/browser/errors\"" }, { "name": "Content-Security-Policy", "value": "default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; frame-src render.githubusercontent.com; img-src 'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self'; media-src 'none'; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com" }, { "name": "X-GitHub-Request-Id", "value": "DD85:7ABB:8C23D:12F9DA:5DAE6379" } ], "cookies": [ { "name": "has_recent_activity", "value": "1", "path": "/", "expires": "2019-10-22T03:03:37.000Z", "httpOnly": false, "secure": false }, { "name": "ignored_unsupported_browser_notice", "value": "false", "path": "/", "expires": null, "httpOnly": false, "secure": false } ], "content": { "size": 0, "mimeType": "text/html", "compression": 0 }, "redirectURL": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "headersSize": 1947, "bodySize": 0, "_transferSize": 1947 }, "cache": {}, "timings": { "blocked": 4.246999986222014, "dns": 30.945, "ssl": 33.469, "connect": 86.82000000000001, "send": 0.1599999999999966, "wait": 43.17199998697825, "receive": 3.882000019075349, "_blocked_queueing": 3.655999986222014 }, "serverIPAddress": "192.30.253.113", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "F", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 192870 }, { "functionName": "Ft.authorize", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 291791 }, { "functionName": "t.logIn", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 605484 }, { "functionName": "t.logIn", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 117607 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 95657 }, { "functionName": "g", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 95463 }, { "functionName": "d", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 95635 }, { "functionName": "o", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 139384 }, { "functionName": "e.handleSubmit", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 137900 }, { "functionName": "onClick", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 138414 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 183899 }, { "functionName": "a", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 179994 }, { "functionName": "s", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 180209 }, { "functionName": "g", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 127228 }, { "functionName": "h", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 127354 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 548299 }, { "functionName": "processEventQueue", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 128416 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 773671 }, { "functionName": "handleTopLevel", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 773741 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 774194 }, { "functionName": "perform", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 148478 }, { "functionName": "batchedUpdates", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 772470 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 100044 }, { "functionName": "dispatchEvent", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 775046 } ] } }, "_priority": "VeryHigh", "_resourceType": "other", "connection": "386896", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:37.096Z", "time": 70.51600000704639, "request": { "method": "GET", "url": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Host", "value": "github.com" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Pragma", "value": "no-cache" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Sec-Fetch-Mode", "value": "navigate" }, { "name": "Sec-Fetch-User", "value": "?1" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "Sec-Fetch-Site", "value": "cross-site" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Cookie", "value": "has_recent_activity=1; ignored_unsupported_browser_notice=false" } ], "queryString": [ { "name": "client_id", "value": "0246739cfbc9f17c5af6" }, { "name": "return_to", "value": "%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" } ], "cookies": [ { "name": "has_recent_activity", "value": "1", "expires": null, "httpOnly": false, "secure": false }, { "name": "ignored_unsupported_browser_notice", "value": "false", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 888, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Server", "value": "GitHub.com" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:37 GMT" }, { "name": "Content-Type", "value": "text/html; charset=utf-8" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Status", "value": "200 OK" }, { "name": "Vary", "value": "X-PJAX" }, { "name": "Cache-Control", "value": "no-cache, no-store" }, { "name": "Set-Cookie", "value": "has_recent_activity=1; path=/; expires=Tue, 22 Oct 2019 03:03:37 -0000" }, { "name": "Set-Cookie", "value": "_octo=GH1.1.172352075.1571709817; domain=.github.com; path=/; expires=Fri, 22 Oct 2021 02:03:37 -0000" }, { "name": "Set-Cookie", "value": "logged_in=no; domain=.github.com; path=/; expires=Sat, 22 Oct 2039 02:03:37 -0000; secure; HttpOnly" }, { "name": "Set-Cookie", "value": "_gh_sess=NVkzdFlKYnNSV0tvUHZma0hKYy9Bci9NTzVMVjJXWDdycHIreWp0ZVd0WFpBWWs3RTZ5MUpmSmZRU2V3T1BrYTgxM1ZIU3hvMFpuaUtNM3NFdXdnUTBnbXZSK0NsSlA3eXo5QmF2TWFBbERXSE1xY0dkbWFNZCtoZEkzNlZ5dHc3L0NLQXJzcVVDcVhNNmZxYlRsRWRWbUduL1lSM2NCbGFSbWM5YU1SWG0yVTlvU2pvelZGM25hbkFrQ1F1SDc2bUhRTEFuU1VFc2pDaURXTjlVMjBoYUc2NWpkck4yb1dKd2U0YTRIN0NnbEtsZmcvemQwa2MvMXZveElyZ0MremN4WGZKRlJIb3NOdUhUQXpEZlgrbnlvM05WeG9vekJ5eEc2ZGtGRjhlOUFBaEpBMnd3aUM4YjY3NkppOWg1VHRHNDdwKzJKWUdScjlaZWNwQnhablhFNnpDWUxuRGE3eVNaazVyTU9MeTgwdjk0WGJ6TmtMVm42V3ByUVNpa2tOWUp1YTB5L2JZRW12NHBlZDdJYnh4SDJLbVpoa01TdVU2RXQ4U0lldnRNYkd0bTd0YlJmd0hKWlZzclIrbmRrdldEdWE1ZDJNVzFVSGlBT2h1TVN5KzhYQkVPQjZQU01zZGZBZklsRXBjdzcxaGdjeitteU80NDNocm9NaFhOTFJyNXFnRDVGZkt4cS9INnVweW14YTNBPT0tLWxYcE5ydmRTaEZBcHp0eVFxV2FVdmc9PQ%3D%3D--86ac6a5d0ac4e5b0bcdd05ce2d9434d32db70b83; path=/; secure; HttpOnly" }, { "name": "X-Request-Id", "value": "2830ea50-ff11-4c31-b29b-dbe31d6f0840" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000; includeSubdomains; preload" }, { "name": "X-Frame-Options", "value": "deny" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "X-XSS-Protection", "value": "1; mode=block" }, { "name": "Referrer-Policy", "value": "origin-when-cross-origin, strict-origin-when-cross-origin" }, { "name": "Expect-CT", "value": "max-age=2592000, report-uri=\"https://api.github.com/_private/browser/errors\"" }, { "name": "Content-Security-Policy", "value": "default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; frame-src render.githubusercontent.com; img-src 'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self'; media-src 'none'; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-GitHub-Request-Id", "value": "DD85:7ABB:8C240:12F9DB:5DAE6379" } ], "cookies": [ { "name": "has_recent_activity", "value": "1", "path": "/", "expires": "2019-10-22T03:03:37.000Z", "httpOnly": false, "secure": false }, { "name": "_octo", "value": "GH1.1.172352075.1571709817", "path": "/", "domain": ".github.com", "expires": "2021-10-22T02:03:37.000Z", "httpOnly": false, "secure": false }, { "name": "logged_in", "value": "no", "path": "/", "domain": ".github.com", "expires": "2039-10-22T02:03:37.000Z", "httpOnly": true, "secure": true }, { "name": "_gh_sess", "value": "NVkzdFlKYnNSV0tvUHZma0hKYy9Bci9NTzVMVjJXWDdycHIreWp0ZVd0WFpBWWs3RTZ5MUpmSmZRU2V3T1BrYTgxM1ZIU3hvMFpuaUtNM3NFdXdnUTBnbXZSK0NsSlA3eXo5QmF2TWFBbERXSE1xY0dkbWFNZCtoZEkzNlZ5dHc3L0NLQXJzcVVDcVhNNmZxYlRsRWRWbUduL1lSM2NCbGFSbWM5YU1SWG0yVTlvU2pvelZGM25hbkFrQ1F1SDc2bUhRTEFuU1VFc2pDaURXTjlVMjBoYUc2NWpkck4yb1dKd2U0YTRIN0NnbEtsZmcvemQwa2MvMXZveElyZ0MremN4WGZKRlJIb3NOdUhUQXpEZlgrbnlvM05WeG9vekJ5eEc2ZGtGRjhlOUFBaEpBMnd3aUM4YjY3NkppOWg1VHRHNDdwKzJKWUdScjlaZWNwQnhablhFNnpDWUxuRGE3eVNaazVyTU9MeTgwdjk0WGJ6TmtMVm42V3ByUVNpa2tOWUp1YTB5L2JZRW12NHBlZDdJYnh4SDJLbVpoa01TdVU2RXQ4U0lldnRNYkd0bTd0YlJmd0hKWlZzclIrbmRrdldEdWE1ZDJNVzFVSGlBT2h1TVN5KzhYQkVPQjZQU01zZGZBZklsRXBjdzcxaGdjeitteU80NDNocm9NaFhOTFJyNXFnRDVGZkt4cS9INnVweW14YTNBPT0tLWxYcE5ydmRTaEZBcHp0eVFxV2FVdmc9PQ%3D%3D--86ac6a5d0ac4e5b0bcdd05ce2d9434d32db70b83", "path": "/", "expires": null, "httpOnly": true, "secure": true } ], "content": { "size": 16266, "mimeType": "text/html", "compression": 10264 }, "redirectURL": "", "headersSize": 2679, "bodySize": 6002, "_transferSize": 8681 }, "cache": {}, "timings": { "blocked": 6.796999998737126, "dns": -1, "ssl": -1, "connect": -1, "send": 0.14400000000000002, "wait": 62.29000000257231, "receive": 1.285000005736947, "_blocked_queueing": 6.443999998737127 }, "serverIPAddress": "192.30.253.113", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "F", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 192870 }, { "functionName": "Ft.authorize", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 291791 }, { "functionName": "t.logIn", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 605484 }, { "functionName": "t.logIn", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 117607 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 95657 }, { "functionName": "g", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 95463 }, { "functionName": "d", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 95635 }, { "functionName": "o", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 139384 }, { "functionName": "e.handleSubmit", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 137900 }, { "functionName": "onClick", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 138414 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 183899 }, { "functionName": "a", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 179994 }, { "functionName": "s", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 180209 }, { "functionName": "g", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 127228 }, { "functionName": "h", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 127354 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 548299 }, { "functionName": "processEventQueue", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 128416 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 773671 }, { "functionName": "handleTopLevel", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 773741 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 774194 }, { "functionName": "perform", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 148478 }, { "functionName": "batchedUpdates", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 772470 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 100044 }, { "functionName": "dispatchEvent", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 775046 } ] } }, "_priority": "VeryHigh", "_resourceType": "document", "connection": "386896", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:32.651Z", "time": 406.6169999868721, "request": { "method": "GET", "url": "https://chronicler-notes.auth0.com/authorize?client_id=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&state=aHu2LAjTuY5TMe0uZLAMrgjFJsHGcPjA&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D", "httpVersion": "http/2.0", "headers": [ { "name": ":method", "value": "GET" }, { "name": ":authority", "value": "chronicler-notes.auth0.com" }, { "name": ":scheme", "value": "https" }, { "name": ":path", "value": "/authorize?client_id=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&state=aHu2LAjTuY5TMe0uZLAMrgjFJsHGcPjA&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D" }, { "name": "pragma", "value": "no-cache" }, { "name": "cache-control", "value": "no-cache" }, { "name": "upgrade-insecure-requests", "value": "1" }, { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "sec-fetch-mode", "value": "navigate" }, { "name": "sec-fetch-user", "value": "?1" }, { "name": "accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "sec-fetch-site", "value": "cross-site" }, { "name": "referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "accept-encoding", "value": "gzip, deflate, br" }, { "name": "accept-language", "value": "en-US,en;q=0.9" } ], "queryString": [ { "name": "client_id", "value": "1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe" }, { "name": "response_type", "value": "token%20id_token" }, { "name": "redirect_uri", "value": "http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback" }, { "name": "scope", "value": "openid%20profile%20email" }, { "name": "audience", "value": "https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo" }, { "name": "state", "value": "aHu2LAjTuY5TMe0uZLAMrgjFJsHGcPjA" }, { "name": "nonce", "value": "z94ilIM3Ks130SAvt9MZusSdL2xpnT2J" }, { "name": "auth0Client", "value": "eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D" } ], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 302, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "status", "value": "302" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:32 GMT" }, { "name": "content-type", "value": "text/html; charset=utf-8" }, { "name": "content-length", "value": "1144" }, { "name": "server", "value": "nginx" }, { "name": "ot-tracer-spanid", "value": "257fd6b35907da0f" }, { "name": "ot-tracer-traceid", "value": "07ac378a6adeb5be" }, { "name": "ot-tracer-sampled", "value": "true" }, { "name": "x-auth0-requestid", "value": "4ee915556a07db1e66a9" }, { "name": "set-cookie", "value": "did=s%3Av0%3A266b46f0-f470-11e9-8f7b-cb565543c93e.X09l8PyUb6gA0QwBwyCsKIsLMW5tyys33hPWbLfUFbw; Max-Age=157788000; Path=/; Expires=Mon, 21 Oct 2024 08:03:32 GMT; HttpOnly; Secure" }, { "name": "set-cookie", "value": "auth0=s%3AMrkxPRFdjc-GFRfpkUIcrrIdGjGVP_x2.%2FizR%2F1Jt1Ekk8iVfSmzlRY52HiDOO7HXFDQqJxXH2Fg; Path=/; Expires=Fri, 25 Oct 2019 02:03:32 GMT; HttpOnly; Secure" }, { "name": "location", "value": "/login?state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&client=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&protocol=oauth2&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D" }, { "name": "vary", "value": "Accept" }, { "name": "cache-control", "value": "private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-transform" }, { "name": "strict-transport-security", "value": "max-age=15724800" }, { "name": "x-robots-tag", "value": "noindex, nofollow, nosnippet, noarchive" } ], "cookies": [ { "name": "did", "value": "s%3Av0%3A266b46f0-f470-11e9-8f7b-cb565543c93e.X09l8PyUb6gA0QwBwyCsKIsLMW5tyys33hPWbLfUFbw", "path": "/", "expires": "2024-10-21T08:03:32.657Z", "httpOnly": true, "secure": true }, { "name": "auth0", "value": "s%3AMrkxPRFdjc-GFRfpkUIcrrIdGjGVP_x2.%2FizR%2F1Jt1Ekk8iVfSmzlRY52HiDOO7HXFDQqJxXH2Fg", "path": "/", "expires": "2019-10-25T02:03:32.000Z", "httpOnly": true, "secure": true } ], "content": { "size": 0, "mimeType": "text/html" }, "redirectURL": "/login?state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&client=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&protocol=oauth2&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D", "headersSize": -1, "bodySize": -1, "_transferSize": 1010 }, "cache": {}, "timings": { "blocked": 5.492999993510544, "dns": 19.663, "ssl": 119.257, "connect": 246.97, "send": 0.49099999999998545, "wait": 130.67799998924323, "receive": 3.3220000041183084, "_blocked_queueing": 5.181999993510544 }, "serverIPAddress": "54.187.133.135", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "redirect", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 3160, "columnNumber": 45128 }, { "functionName": "./node_modules/auth0-js/dist/auth0.min.esm.js.WebAuth.authorize", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 3160, "columnNumber": 124608 }, { "functionName": "login", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56312, "columnNumber": 397 }, { "functionName": "onClick", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56250, "columnNumber": 1374 }, { "functionName": "callCallback", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 11973, "columnNumber": 13 }, { "functionName": "invokeGuardedCallbackDev", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12022, "columnNumber": 15 }, { "functionName": "invokeGuardedCallback", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12077, "columnNumber": 30 }, { "functionName": "invokeGuardedCallbackAndCatchFirstError", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12091, "columnNumber": 24 }, { "functionName": "executeDispatch", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12223, "columnNumber": 2 }, { "functionName": "executeDispatchesInOrder", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12248, "columnNumber": 4 }, { "functionName": "executeDispatchesAndRelease", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12354, "columnNumber": 4 }, { "functionName": "executeDispatchesAndReleaseTopLevel", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12363, "columnNumber": 9 }, { "functionName": "forEachAccumulated", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12335, "columnNumber": 7 }, { "functionName": "runEventsInBatch", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12380, "columnNumber": 2 }, { "functionName": "runExtractedPluginEventsInBatch", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12525, "columnNumber": 2 }, { "functionName": "handleTopLevel", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 17459, "columnNumber": 4 }, { "functionName": "batchedEventUpdates$1", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 35952, "columnNumber": 11 }, { "functionName": "batchedEventUpdates", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 13074, "columnNumber": 11 }, { "functionName": "dispatchEventForPluginEventSystem", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 17554, "columnNumber": 4 }, { "functionName": "attemptToDispatchEvent", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 17670, "columnNumber": 4 }, { "functionName": "dispatchEvent", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 17574, "columnNumber": 18 }, { "functionName": "unstable_runWithPriority", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 40901, "columnNumber": 11 }, { "functionName": "runWithPriority$2", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 23799, "columnNumber": 9 }, { "functionName": "discreteUpdates$1", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 35968, "columnNumber": 11 }, { "functionName": "discreteUpdates", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 13097, "columnNumber": 11 }, { "functionName": "dispatchDiscreteEvent", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 17537, "columnNumber": 2 } ] } }, "_priority": "VeryHigh", "_resourceType": "other", "connection": "386837", "pageref": "page_2" }, { "startedDateTime": "2019-10-22T02:03:33.038Z", "time": 132.42900001932867, "request": { "method": "GET", "url": "https://chronicler-notes.auth0.com/login?state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&client=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&protocol=oauth2&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D", "httpVersion": "http/2.0", "headers": [ { "name": ":method", "value": "GET" }, { "name": ":authority", "value": "chronicler-notes.auth0.com" }, { "name": ":scheme", "value": "https" }, { "name": ":path", "value": "/login?state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&client=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&protocol=oauth2&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D" }, { "name": "pragma", "value": "no-cache" }, { "name": "cache-control", "value": "no-cache" }, { "name": "upgrade-insecure-requests", "value": "1" }, { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "sec-fetch-mode", "value": "navigate" }, { "name": "sec-fetch-user", "value": "?1" }, { "name": "accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "sec-fetch-site", "value": "cross-site" }, { "name": "referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "accept-encoding", "value": "gzip, deflate, br" }, { "name": "accept-language", "value": "en-US,en;q=0.9" }, { "name": "cookie", "value": "did=s%3Av0%3A266b46f0-f470-11e9-8f7b-cb565543c93e.X09l8PyUb6gA0QwBwyCsKIsLMW5tyys33hPWbLfUFbw; auth0=s%3AMrkxPRFdjc-GFRfpkUIcrrIdGjGVP_x2.%2FizR%2F1Jt1Ekk8iVfSmzlRY52HiDOO7HXFDQqJxXH2Fg" } ], "queryString": [ { "name": "state", "value": "g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU" }, { "name": "client", "value": "1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe" }, { "name": "protocol", "value": "oauth2" }, { "name": "response_type", "value": "token%20id_token" }, { "name": "redirect_uri", "value": "http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback" }, { "name": "scope", "value": "openid%20profile%20email" }, { "name": "audience", "value": "https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo" }, { "name": "nonce", "value": "z94ilIM3Ks130SAvt9MZusSdL2xpnT2J" }, { "name": "auth0Client", "value": "eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D" } ], "cookies": [ { "name": "did", "value": "s%3Av0%3A266b46f0-f470-11e9-8f7b-cb565543c93e.X09l8PyUb6gA0QwBwyCsKIsLMW5tyys33hPWbLfUFbw", "expires": null, "httpOnly": false, "secure": false }, { "name": "auth0", "value": "s%3AMrkxPRFdjc-GFRfpkUIcrrIdGjGVP_x2.%2FizR%2F1Jt1Ekk8iVfSmzlRY52HiDOO7HXFDQqJxXH2Fg", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "status", "value": "200" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:33 GMT" }, { "name": "content-type", "value": "text/html; charset=utf-8" }, { "name": "server", "value": "nginx" }, { "name": "vary", "value": "Accept-Encoding" }, { "name": "ot-tracer-spanid", "value": "362037673d4198d7" }, { "name": "ot-tracer-traceid", "value": "20e7758b0486e311" }, { "name": "ot-tracer-sampled", "value": "true" }, { "name": "x-auth0-requestid", "value": "a16231f2a0709c841793" }, { "name": "set-cookie", "value": "_csrf=nqb4U8G8VWznUSF9VEVniKhm; Max-Age=864000000; Path=/usernamepassword/login; HttpOnly; Secure" }, { "name": "x-robots-tag", "value": "noindex, nofollow" }, { "name": "x-robots-tag", "value": "noindex, nofollow, nosnippet, noarchive" }, { "name": "x-frame-options", "value": "deny" }, { "name": "content-security-policy", "value": "frame-ancestors 'none'" }, { "name": "x-xss-protection", "value": "1; mode=block" }, { "name": "x-content-type-options", "value": "nosniff" }, { "name": "referrer-policy", "value": "same-origin" }, { "name": "etag", "value": "W/\"927-gfycUQ5TO+w04POAB+eBOLpT3Zw\"" }, { "name": "cache-control", "value": "private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-transform" }, { "name": "strict-transport-security", "value": "max-age=15724800" }, { "name": "content-encoding", "value": "gzip" } ], "cookies": [ { "name": "_csrf", "value": "nqb4U8G8VWznUSF9VEVniKhm", "path": "/usernamepassword/login", "expires": "2047-03-09T02:03:33.041Z", "httpOnly": true, "secure": true } ], "content": { "size": 2343, "mimeType": "text/html" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 1956 }, "cache": {}, "timings": { "blocked": 3.4629999971296637, "dns": -1, "ssl": -1, "connect": -1, "send": 0.3320000000000001, "wait": 127.63500001141988, "receive": 0.9990000107791275, "_blocked_queueing": 2.892999997129664 }, "serverIPAddress": "54.187.133.135", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "redirect", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 3160, "columnNumber": 45128 }, { "functionName": "./node_modules/auth0-js/dist/auth0.min.esm.js.WebAuth.authorize", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 3160, "columnNumber": 124608 }, { "functionName": "login", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56312, "columnNumber": 397 }, { "functionName": "onClick", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56250, "columnNumber": 1374 }, { "functionName": "callCallback", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 11973, "columnNumber": 13 }, { "functionName": "invokeGuardedCallbackDev", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12022, "columnNumber": 15 }, { "functionName": "invokeGuardedCallback", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12077, "columnNumber": 30 }, { "functionName": "invokeGuardedCallbackAndCatchFirstError", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12091, "columnNumber": 24 }, { "functionName": "executeDispatch", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12223, "columnNumber": 2 }, { "functionName": "executeDispatchesInOrder", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12248, "columnNumber": 4 }, { "functionName": "executeDispatchesAndRelease", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12354, "columnNumber": 4 }, { "functionName": "executeDispatchesAndReleaseTopLevel", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12363, "columnNumber": 9 }, { "functionName": "forEachAccumulated", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12335, "columnNumber": 7 }, { "functionName": "runEventsInBatch", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12380, "columnNumber": 2 }, { "functionName": "runExtractedPluginEventsInBatch", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 12525, "columnNumber": 2 }, { "functionName": "handleTopLevel", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 17459, "columnNumber": 4 }, { "functionName": "batchedEventUpdates$1", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 35952, "columnNumber": 11 }, { "functionName": "batchedEventUpdates", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 13074, "columnNumber": 11 }, { "functionName": "dispatchEventForPluginEventSystem", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 17554, "columnNumber": 4 }, { "functionName": "attemptToDispatchEvent", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 17670, "columnNumber": 4 }, { "functionName": "dispatchEvent", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 17574, "columnNumber": 18 }, { "functionName": "unstable_runWithPriority", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 40901, "columnNumber": 11 }, { "functionName": "runWithPriority$2", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 23799, "columnNumber": 9 }, { "functionName": "discreteUpdates$1", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 35968, "columnNumber": 11 }, { "functionName": "discreteUpdates", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 13097, "columnNumber": 11 }, { "functionName": "dispatchDiscreteEvent", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 17537, "columnNumber": 2 } ] } }, "_priority": "VeryHigh", "_resourceType": "document", "connection": "386837", "pageref": "page_2" }, { "startedDateTime": "2019-10-22T02:03:27.028Z", "time": 211.41100000267102, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Host", "value": "dev.chronicler-notes.com:8000" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Pragma", "value": "no-cache" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" }, { "name": "Accept-Encoding", "value": "gzip, deflate" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" } ], "queryString": [], "cookies": [], "headersSize": 478, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "X-Powered-By", "value": "Express" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Cache-Control", "value": "public, max-age=0" }, { "name": "Last-Modified", "value": "Tue, 22 Oct 2019 01:41:34 GMT" }, { "name": "ETag", "value": "W/\"627-16df1206355\"" }, { "name": "Content-Type", "value": "text/html; charset=UTF-8" }, { "name": "Content-Length", "value": "1575" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "Connection", "value": "keep-alive" } ], "cookies": [], "content": { "size": 1575, "mimeType": "text/html", "compression": 0 }, "redirectURL": "", "headersSize": 326, "bodySize": 1575, "_transferSize": 1901 }, "cache": {}, "timings": { "blocked": 7.86099999945797, "dns": 0.06800000000000006, "ssl": -1, "connect": 0.30699999999999994, "send": 0.13100000000000023, "wait": 202.61200000248476, "receive": 0.43200000072829425, "_blocked_queueing": 5.39299999945797 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "other" }, "_priority": "VeryHigh", "_resourceType": "document", "connection": "386720", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.394Z", "time": 11.851000017486513, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "httpVersion": "http/1.1", "headers": [ { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "Cache-Control", "value": "public, max-age=0" }, { "name": "Connection", "value": "keep-alive" }, { "name": "ETag", "value": "\"2.3.0\"" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Content-Type", "value": "application/javascript" } ], "cookies": [], "content": { "size": 68686, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 68895 }, "cache": {}, "timings": { "blocked": 10.469000003917143, "dns": -1, "ssl": -1, "connect": -1, "send": 0.07, "wait": 0.8769999899975955, "receive": 0.43500002357177436, "_blocked_queueing": 10.156000003917143 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "parser", "url": "http://dev.chronicler-notes.com:8000/", "lineNumber": 0 }, "_priority": "High", "_resourceType": "script", "connection": "386720", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.395Z", "time": 82.96999998856336, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/commons.js", "httpVersion": "http/1.1", "headers": [ { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "X-Powered-By", "value": "Express" }, { "name": "ETag", "value": "W/\"272d70-NZz6IHxCL/p9Ur9BKp4Lymovk/k\"" }, { "name": "Content-Type", "value": "application/javascript; charset=UTF-8" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Content-Length", "value": "2567536" } ], "cookies": [], "content": { "size": 2567536, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 2567817 }, "cache": {}, "timings": { "blocked": 15.182999975210056, "dns": -1, "ssl": -1, "connect": -1, "send": 0.065, "wait": 5.248000007603317, "receive": 62.474000005749986, "_blocked_queueing": 14.906999975210056 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "parser", "url": "http://dev.chronicler-notes.com:8000/", "lineNumber": 0 }, "_priority": "High", "_resourceType": "script", "connection": "386720", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.708Z", "time": 2.367000008234754, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/socket.io/?EIO=3&transport=polling&t=MtnD6nR", "httpVersion": "http/1.1", "headers": [ { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [ { "name": "EIO", "value": "3" }, { "name": "transport", "value": "polling" }, { "name": "t", "value": "MtnD6nR" } ], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Content-Length", "value": "103" }, { "name": "Content-Type", "value": "text/plain; charset=UTF-8" } ], "cookies": [], "content": { "size": 103, "mimeType": "text/plain" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 332 }, "cache": {}, "timings": { "blocked": 0.9810000188630075, "dns": -1, "ssl": -1, "connect": -1, "send": 0.07500000000000001, "wait": 0.8519999867789447, "receive": 0.45900000259280205, "_blocked_queueing": 0.6790000188630074 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.doOpen", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12034 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 14739 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 258 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 30368 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 30376 }, { "functionName": "r.open.r.connect", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 24252 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 22590 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 21813 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 705 }, { "functionName": "socketIo", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1496, "columnNumber": 7 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 863, "columnNumber": 68 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 862, "columnNumber": 93 }, { "functionName": "./.cache/app.js", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 871, "columnNumber": 29 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "fn", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 100, "columnNumber": 19 }, { "functionName": "0", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56326, "columnNumber": 17 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 793, "columnNumber": 36 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 796, "columnNumber": 9 } ] } } }, "_priority": "High", "_resourceType": "xhr", "connection": "386720", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.710Z", "time": 6.235000008018687, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/page-data/dev-404-page/page-data.json", "httpVersion": "http/1.1", "headers": [ { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "ETag", "value": "W/\"144-16df1205f50\"" }, { "name": "Last-Modified", "value": "Tue, 22 Oct 2019 01:41:33 GMT" }, { "name": "X-Powered-By", "value": "Express" }, { "name": "Content-Type", "value": "application/json; charset=UTF-8" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Cache-Control", "value": "public, max-age=0" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Content-Length", "value": "324" } ], "cookies": [], "content": { "size": 324, "mimeType": "application/json" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 656 }, "cache": {}, "timings": { "blocked": 2.089000001402572, "dns": -1, "ssl": -1, "connect": -1, "send": 0.07600000000000001, "wait": 3.6559999974295496, "receive": 0.4140000091865659, "_blocked_queueing": 1.8310000014025718 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1195, "columnNumber": 899 }, { "functionName": "doFetch", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1195, "columnNumber": 731 }, { "functionName": "loadPageDataJson", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1195, "columnNumber": 1131 }, { "functionName": "loadPageDataJson", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1217, "columnNumber": 704 }, { "functionName": "loadPageDataJson", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 936, "columnNumber": 1140 }, { "functionName": "loadPage", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1218, "columnNumber": 336 }, { "functionName": "loadPage", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 936, "columnNumber": 849 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 870, "columnNumber": 548 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 862, "columnNumber": 93 }, { "functionName": "./.cache/app.js", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 871, "columnNumber": 29 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "fn", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 100, "columnNumber": 19 }, { "functionName": "0", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56326, "columnNumber": 17 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 793, "columnNumber": 36 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 796, "columnNumber": 9 } ] } } }, "_priority": "High", "_resourceType": "xhr", "connection": "386720", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.714Z", "time": 5.132999998750165, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/page-data/404.html/page-data.json", "httpVersion": "http/1.1", "headers": [ { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "ETag", "value": "W/\"a5-16df1205f5e\"" }, { "name": "Last-Modified", "value": "Tue, 22 Oct 2019 01:41:33 GMT" }, { "name": "X-Powered-By", "value": "Express" }, { "name": "Content-Type", "value": "application/json; charset=UTF-8" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Cache-Control", "value": "public, max-age=0" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Content-Length", "value": "165" } ], "cookies": [], "content": { "size": 165, "mimeType": "application/json" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 496 }, "cache": {}, "timings": { "blocked": 2.24699999820441, "dns": -1, "ssl": -1, "connect": -1, "send": 0.065, "wait": 2.397000002525747, "receive": 0.4239999980200082, "_blocked_queueing": 1.97199999820441 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1195, "columnNumber": 899 }, { "functionName": "doFetch", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1195, "columnNumber": 731 }, { "functionName": "loadPageDataJson", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1195, "columnNumber": 1131 }, { "functionName": "loadPageDataJson", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1217, "columnNumber": 704 }, { "functionName": "loadPageDataJson", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 936, "columnNumber": 1140 }, { "functionName": "loadPage", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1218, "columnNumber": 336 }, { "functionName": "loadPage", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 936, "columnNumber": 849 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 870, "columnNumber": 582 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 862, "columnNumber": 93 }, { "functionName": "./.cache/app.js", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 871, "columnNumber": 29 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "fn", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 100, "columnNumber": 19 }, { "functionName": "0", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56326, "columnNumber": 17 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 793, "columnNumber": 36 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 796, "columnNumber": 9 } ] } } }, "_priority": "High", "_resourceType": "xhr", "connection": "386720", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.721Z", "time": 3.3039999834727496, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/page-data/index/page-data.json", "httpVersion": "http/1.1", "headers": [ { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "ETag", "value": "W/\"9f-16df1205f50\"" }, { "name": "Last-Modified", "value": "Tue, 22 Oct 2019 01:41:33 GMT" }, { "name": "X-Powered-By", "value": "Express" }, { "name": "Content-Type", "value": "application/json; charset=UTF-8" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Cache-Control", "value": "public, max-age=0" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Content-Length", "value": "159" } ], "cookies": [], "content": { "size": 159, "mimeType": "application/json" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 490 }, "cache": {}, "timings": { "blocked": 1.4699999938830732, "dns": -1, "ssl": -1, "connect": -1, "send": 0.09999999999999998, "wait": 1.33200001356937, "receive": 0.40199997602030635, "_blocked_queueing": 1.2069999938830733 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1195, "columnNumber": 899 }, { "functionName": "doFetch", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1195, "columnNumber": 731 }, { "functionName": "loadPageDataJson", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1195, "columnNumber": 1131 }, { "functionName": "loadPageDataJson", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1217, "columnNumber": 704 }, { "functionName": "loadPageDataJson", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 936, "columnNumber": 1140 }, { "functionName": "loadPage", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1218, "columnNumber": 336 }, { "functionName": "loadPage", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 936, "columnNumber": 849 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 870, "columnNumber": 611 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 862, "columnNumber": 93 }, { "functionName": "./.cache/app.js", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 871, "columnNumber": 29 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "fn", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 100, "columnNumber": 19 }, { "functionName": "0", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56326, "columnNumber": 17 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 793, "columnNumber": 36 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 796, "columnNumber": 9 } ] } } }, "_priority": "High", "_resourceType": "xhr", "connection": "386720", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.805Z", "time": 251.46699999459088, "request": { "method": "GET", "url": "ws://dev.chronicler-notes.com:8000/socket.io/?EIO=3&transport=websocket&sid=S8SxzQN4zF33MrC2AAAM", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "Origin", "value": "http://dev.chronicler-notes.com:8000" }, { "name": "Accept-Encoding", "value": "gzip, deflate" }, { "name": "Host", "value": "dev.chronicler-notes.com:8000" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Sec-WebSocket-Key", "value": "ttP1/qKkhRFbiVy9qSlFPQ==" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Upgrade", "value": "websocket" }, { "name": "Sec-WebSocket-Extensions", "value": "permessage-deflate; client_max_window_bits" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Connection", "value": "Upgrade" }, { "name": "Sec-WebSocket-Version", "value": "13" } ], "queryString": [ { "name": "EIO", "value": "3" }, { "name": "transport", "value": "websocket" }, { "name": "sid", "value": "S8SxzQN4zF33MrC2AAAM" } ], "cookies": [], "headersSize": 622, "bodySize": 0 }, "response": { "status": 101, "statusText": "Switching Protocols", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Sec-WebSocket-Accept", "value": "IYKUkdWdDzQvE1/AkPGApSsz3cU=" }, { "name": "Connection", "value": "Upgrade" }, { "name": "Sec-WebSocket-Extensions", "value": "permessage-deflate" }, { "name": "Upgrade", "value": "websocket" } ], "cookies": [], "content": { "size": 0, "mimeType": "x-unknown", "compression": 175 }, "redirectURL": "", "headersSize": 175, "bodySize": -175, "_transferSize": 0 }, "cache": {}, "timings": { "blocked": -1, "dns": -1, "ssl": -1, "connect": -1, "send": 0, "wait": 251.46699999459088, "receive": 0, "_blocked_queueing": -1 }, "serverIPAddress": "", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "r.doOpen", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 7, "columnNumber": 6159 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 14739 }, { "functionName": "r.probe", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 2174 }, { "functionName": "r.onOpen", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 2483 }, { "functionName": "r.onHandshake", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 3287 }, { "functionName": "r.onPacket", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 2760 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 559 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 19838 }, { "functionName": "r.onPacket", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 15216 }, { "functionName": "n", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12766 }, { "functionName": "e.decodePayload", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18708 }, { "functionName": "r.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12781 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8830 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 19838 }, { "functionName": "i.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10634 }, { "functionName": "i.onLoad", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 11298 }, { "functionName": "hasXDR.e.onreadystatechange", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10248 } ], "parent": { "description": "XMLHttpRequest.send", "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.doOpen", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12034 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 14739 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 258 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 30368 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 30376 }, { "functionName": "r.open.r.connect", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 24252 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 22590 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 21813 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 705 }, { "functionName": "socketIo", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1496, "columnNumber": 7 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 863, "columnNumber": 68 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 862, "columnNumber": 93 }, { "functionName": "./.cache/app.js", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 871, "columnNumber": 29 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "fn", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 100, "columnNumber": 19 }, { "functionName": "0", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56326, "columnNumber": 17 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 793, "columnNumber": 36 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 796, "columnNumber": 9 } ] } } } }, "_priority": null, "_resourceType": "websocket", "pageref": "page_1", "_webSocketMessages": [ { "type": "send", "time": 1571709807.810086, "opcode": 1, "data": "2probe" }, { "type": "receive", "time": 1571709807.8841271, "opcode": 1, "data": "3probe" }, { "type": "send", "time": 1571709807.885504, "opcode": 1, "data": "5" }, { "type": "send", "time": 1571709807.9108732, "opcode": 1, "data": "42[\"unregisterPath\",null]" }, { "type": "send", "time": 1571709808.0444272, "opcode": 1, "data": "42[\"registerPath\",\"/\"]" }, { "type": "send", "time": 1571709808.0445302, "opcode": 1, "data": "42[\"registerPath\",\"/\"]" }, { "type": "send", "time": 1571709808.0527291, "opcode": 1, "data": "42[\"getDataForPath\",\"/profile\"]" }, { "type": "send", "time": 1571709808.052758, "opcode": 1, "data": "42[\"getDataForPath\",\"/page-2\"]" }, { "type": "receive", "time": 1571709808.05397, "opcode": 1, "data": "42[\"message\",{\"type\":\"pageQueryResult\",\"why\":\"getDataForPath\",\"payload\":{\"result\":{\"pageContext\":{\"isCreatedByStatefulCreatePages\":true}},\"id\":\"/profile\"}}]" }, { "type": "receive", "time": 1571709808.057451, "opcode": 1, "data": "42[\"message\",{\"type\":\"pageQueryResult\",\"why\":\"getDataForPath\",\"payload\":{\"result\":{\"pageContext\":{\"isCreatedByStatefulCreatePages\":true}},\"id\":\"/page-2\"}}]" } ] }, { "startedDateTime": "2019-10-22T02:03:27.795Z", "time": 2.8120000049006197, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/socket.io/?EIO=3&transport=polling&t=MtnD6op&sid=S8SxzQN4zF33MrC2AAAM", "httpVersion": "http/1.1", "headers": [ { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [ { "name": "EIO", "value": "3" }, { "name": "transport", "value": "polling" }, { "name": "t", "value": "MtnD6op" }, { "name": "sid", "value": "S8SxzQN4zF33MrC2AAAM" } ], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Content-Length", "value": "1244" }, { "name": "Content-Type", "value": "text/plain; charset=UTF-8" } ], "cookies": [], "content": { "size": 2188, "mimeType": "text/plain" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 1498 }, "cache": {}, "timings": { "blocked": 0.975000003810972, "dns": 0.024999999999999994, "ssl": -1, "connect": 0.19499999999999998, "send": 0.24300000000000005, "wait": 0.9200000074654817, "receive": 0.45399999362416565, "_blocked_queueing": 0.742000003810972 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12924 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8830 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 19838 }, { "functionName": "i.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10634 }, { "functionName": "i.onLoad", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 11298 }, { "functionName": "hasXDR.e.onreadystatechange", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10248 } ], "parent": { "description": "XMLHttpRequest.send", "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.doOpen", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12034 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 14739 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 258 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 30368 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 30376 }, { "functionName": "r.open.r.connect", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 24252 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 22590 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 21813 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 705 }, { "functionName": "socketIo", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1496, "columnNumber": 7 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 863, "columnNumber": 68 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 862, "columnNumber": 93 }, { "functionName": "./.cache/app.js", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 871, "columnNumber": 29 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "fn", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 100, "columnNumber": 19 }, { "functionName": "0", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56326, "columnNumber": 17 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 793, "columnNumber": 36 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 796, "columnNumber": 9 } ] } } } }, "_priority": "High", "_resourceType": "xhr", "connection": "386785", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.801Z", "time": 2.286000002641231, "request": { "method": "POST", "url": "http://dev.chronicler-notes.com:8000/socket.io/?EIO=3&transport=polling&t=MtnD6ou&sid=S8SxzQN4zF33MrC2AAAM", "httpVersion": "http/1.1", "headers": [ { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "Origin", "value": "http://dev.chronicler-notes.com:8000" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Content-type", "value": "text/plain;charset=UTF-8" } ], "queryString": [ { "name": "EIO", "value": "3" }, { "name": "transport", "value": "polling" }, { "name": "t", "value": "MtnD6ou" }, { "name": "sid", "value": "S8SxzQN4zF33MrC2AAAM" } ], "cookies": [], "headersSize": -1, "bodySize": 39, "postData": { "mimeType": "text/plain;charset=UTF-8", "text": "36:42[\"getDataForPath\",\"/dev-404-page\"]" } }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Access-Control-Allow-Origin", "value": "http://dev.chronicler-notes.com:8000" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "Access-Control-Allow-Credentials", "value": "true" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Content-Length", "value": "2" }, { "name": "Content-Type", "value": "text/html" } ], "cookies": [], "content": { "size": 2, "mimeType": "text/html" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 288 }, "cache": {}, "timings": { "blocked": 1.155999978279695, "dns": -1, "ssl": -1, "connect": -1, "send": 0.11699999999999999, "wait": 0.4739999946858734, "receive": 0.5390000296756625, "_blocked_queueing": 0.9029999782796949 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doWrite", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8591 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 13382 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18264 }, { "functionName": "o", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 21730 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16114 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18083 }, { "functionName": "e.encodePacket", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16950 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18046 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16089 }, { "functionName": "c", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16143 }, { "functionName": "e.encodePayload", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18237 }, { "functionName": "r.write", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 13332 }, { "functionName": "r.send", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 14983 }, { "functionName": "r.flush", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 4331 }, { "functionName": "r.sendPacket", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 4837 }, { "functionName": "r.write.r.send", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 4481 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 26286 }, { "functionName": "r.encode", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 12259 }, { "functionName": "r.packet", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 26229 }, { "functionName": "r.packet", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 7, "columnNumber": 9600 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 7, "columnNumber": 9492 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1496, "columnNumber": 2107 }, { "functionName": "getPageData", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1496, "columnNumber": 1602 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 936, "columnNumber": 960 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "loadPage", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 936, "columnNumber": 869 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 870, "columnNumber": 548 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 862, "columnNumber": 93 }, { "functionName": "./.cache/app.js", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 871, "columnNumber": 29 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "fn", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 100, "columnNumber": 19 }, { "functionName": "0", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56326, "columnNumber": 17 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 793, "columnNumber": 36 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 796, "columnNumber": 9 } ] } } } }, "_priority": "High", "_resourceType": "xhr", "connection": "386785", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.808Z", "time": 70.2070000115782, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/socket.io/?EIO=3&transport=polling&t=MtnD6o_&sid=S8SxzQN4zF33MrC2AAAM", "httpVersion": "http/1.1", "headers": [ { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [ { "name": "EIO", "value": "3" }, { "name": "transport", "value": "polling" }, { "name": "t", "value": "MtnD6o_" }, { "name": "sid", "value": "S8SxzQN4zF33MrC2AAAM" } ], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Content-Length", "value": "314" }, { "name": "Content-Type", "value": "text/plain; charset=UTF-8" } ], "cookies": [], "content": { "size": 314, "mimeType": "text/plain" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 543 }, "cache": {}, "timings": { "blocked": 0.9479999936446548, "dns": -1, "ssl": -1, "connect": -1, "send": 0.063, "wait": 68.70299998927861, "receive": 0.493000028654933, "_blocked_queueing": 0.6259999936446548 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12924 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8830 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 19838 }, { "functionName": "i.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10634 }, { "functionName": "i.onLoad", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 11298 }, { "functionName": "hasXDR.e.onreadystatechange", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10248 } ], "parent": { "description": "XMLHttpRequest.send", "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12924 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8830 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 19838 }, { "functionName": "i.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10634 }, { "functionName": "i.onLoad", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 11298 }, { "functionName": "hasXDR.e.onreadystatechange", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10248 } ], "parent": { "description": "XMLHttpRequest.send", "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.doOpen", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12034 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 14739 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 258 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 30368 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 30376 }, { "functionName": "r.open.r.connect", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 24252 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 22590 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 21813 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 705 }, { "functionName": "socketIo", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1496, "columnNumber": 7 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 863, "columnNumber": 68 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 862, "columnNumber": 93 }, { "functionName": "./.cache/app.js", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 871, "columnNumber": 29 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "fn", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 100, "columnNumber": 19 }, { "functionName": "0", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56326, "columnNumber": 17 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 793, "columnNumber": 36 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 796, "columnNumber": 9 } ] } } } } }, "_priority": "High", "_resourceType": "xhr", "connection": "386785", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.811Z", "time": 68.37299999714456, "request": { "method": "POST", "url": "http://dev.chronicler-notes.com:8000/socket.io/?EIO=3&transport=polling&t=MtnD6p3&sid=S8SxzQN4zF33MrC2AAAM", "httpVersion": "http/1.1", "headers": [ { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "Origin", "value": "http://dev.chronicler-notes.com:8000" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Content-type", "value": "text/plain;charset=UTF-8" } ], "queryString": [ { "name": "EIO", "value": "3" }, { "name": "transport", "value": "polling" }, { "name": "t", "value": "MtnD6p3" }, { "name": "sid", "value": "S8SxzQN4zF33MrC2AAAM" } ], "cookies": [], "headersSize": -1, "bodySize": 62, "postData": { "mimeType": "text/plain;charset=UTF-8", "text": "32:42[\"getDataForPath\",\"/404.html\"]24:42[\"getDataForPath\",\"/\"]" } }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Access-Control-Allow-Origin", "value": "http://dev.chronicler-notes.com:8000" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "Access-Control-Allow-Credentials", "value": "true" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Content-Length", "value": "2" }, { "name": "Content-Type", "value": "text/html" } ], "cookies": [], "content": { "size": 2, "mimeType": "text/html" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 288 }, "cache": {}, "timings": { "blocked": 0.7200000083632767, "dns": 0.013999999999999999, "ssl": -1, "connect": 0.262, "send": 0.16800000000000004, "wait": 66.71599998923018, "receive": 0.4929999995511025, "_blocked_queueing": 0.6050000083632767 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doWrite", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8591 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 13382 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18264 }, { "functionName": "o", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 21730 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16114 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18083 }, { "functionName": "e.encodePacket", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16950 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18046 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16089 }, { "functionName": "c", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16143 }, { "functionName": "e.encodePayload", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18237 }, { "functionName": "r.write", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 13332 }, { "functionName": "r.send", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 14983 }, { "functionName": "r.flush", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 4331 }, { "functionName": "r.onDrain", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 4123 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 521 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 19838 }, { "functionName": "n", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 13315 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 19838 }, { "functionName": "i.onSuccess", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10566 }, { "functionName": "i.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10654 }, { "functionName": "i.onLoad", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 11298 }, { "functionName": "hasXDR.e.onreadystatechange", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10248 } ], "parent": { "description": "XMLHttpRequest.send", "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doWrite", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8591 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 13382 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18264 }, { "functionName": "o", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 21730 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16114 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18083 }, { "functionName": "e.encodePacket", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16950 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18046 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16089 }, { "functionName": "c", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 16143 }, { "functionName": "e.encodePayload", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 18237 }, { "functionName": "r.write", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 13332 }, { "functionName": "r.send", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 14983 }, { "functionName": "r.flush", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 4331 }, { "functionName": "r.sendPacket", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 4837 }, { "functionName": "r.write.r.send", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 4481 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 26286 }, { "functionName": "r.encode", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 12259 }, { "functionName": "r.packet", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 26229 }, { "functionName": "r.packet", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 7, "columnNumber": 9600 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 7, "columnNumber": 9492 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1496, "columnNumber": 2107 }, { "functionName": "getPageData", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1496, "columnNumber": 1602 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 936, "columnNumber": 960 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "loadPage", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 936, "columnNumber": 869 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 870, "columnNumber": 548 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 862, "columnNumber": 93 }, { "functionName": "./.cache/app.js", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 871, "columnNumber": 29 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "fn", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 100, "columnNumber": 19 }, { "functionName": "0", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56326, "columnNumber": 17 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 793, "columnNumber": 36 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 796, "columnNumber": 9 } ] } } } } }, "_priority": "High", "_resourceType": "xhr", "connection": "386797", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:27.881Z", "time": 2.0369999983813614, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/socket.io/?EIO=3&transport=polling&t=MtnD6q8&sid=S8SxzQN4zF33MrC2AAAM", "httpVersion": "http/1.1", "headers": [ { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [ { "name": "EIO", "value": "3" }, { "name": "transport", "value": "polling" }, { "name": "t", "value": "MtnD6q8" }, { "name": "sid", "value": "S8SxzQN4zF33MrC2AAAM" } ], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:27 GMT" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Content-Length", "value": "314" }, { "name": "Content-Type", "value": "text/plain; charset=UTF-8" } ], "cookies": [], "content": { "size": 314, "mimeType": "text/plain" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 543 }, "cache": {}, "timings": { "blocked": 1.2470000021439045, "dns": -1, "ssl": -1, "connect": -1, "send": 0.07, "wait": 0.40699999941512943, "receive": 0.3129999968223274, "_blocked_queueing": 0.9520000021439046 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12924 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8830 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 19838 }, { "functionName": "i.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10634 }, { "functionName": "i.onLoad", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 11298 }, { "functionName": "hasXDR.e.onreadystatechange", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10248 } ], "parent": { "description": "XMLHttpRequest.send", "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12924 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8830 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 19838 }, { "functionName": "i.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10634 }, { "functionName": "i.onLoad", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 11298 }, { "functionName": "hasXDR.e.onreadystatechange", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10248 } ], "parent": { "description": "XMLHttpRequest.send", "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12924 }, { "functionName": "", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8830 }, { "functionName": "r.emit", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 19838 }, { "functionName": "i.onData", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10634 }, { "functionName": "i.onLoad", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 11298 }, { "functionName": "hasXDR.e.onreadystatechange", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10248 } ], "parent": { "description": "XMLHttpRequest.send", "callFrames": [ { "functionName": "i.create", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 10362 }, { "functionName": "i", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 7813 }, { "functionName": "o.request", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8503 }, { "functionName": "o.doPoll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 8787 }, { "functionName": "r.poll", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12563 }, { "functionName": "r.doOpen", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 12034 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 14739 }, { "functionName": "r.open", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 6, "columnNumber": 258 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 30368 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 30376 }, { "functionName": "r.open.r.connect", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 24252 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 22590 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 21813 }, { "functionName": "r", "scriptId": "13", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "lineNumber": 5, "columnNumber": 705 }, { "functionName": "socketIo", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 1496, "columnNumber": 7 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 863, "columnNumber": 68 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 862, "columnNumber": 93 }, { "functionName": "./.cache/app.js", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 871, "columnNumber": 29 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "fn", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 100, "columnNumber": 19 }, { "functionName": "0", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 56326, "columnNumber": 17 }, { "functionName": "__webpack_require__", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 726, "columnNumber": 29 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 793, "columnNumber": 36 }, { "functionName": "", "scriptId": "14", "url": "http://dev.chronicler-notes.com:8000/commons.js", "lineNumber": 796, "columnNumber": 9 } ] } } } } } }, "_priority": "High", "_resourceType": "xhr", "connection": "386797", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:28.038Z", "time": 3.78699999419041, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/static/6d91c86c0fde632ba4cd01062fd9ccfa/59139/gatsby-astronaut.png", "httpVersion": "http/1.1", "headers": [ { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:28 GMT" }, { "name": "Last-Modified", "value": "Wed, 16 Oct 2019 01:00:04 GMT" }, { "name": "X-Powered-By", "value": "Express" }, { "name": "ETag", "value": "W/\"5353-16dd2143b78\"" }, { "name": "Content-Type", "value": "image/png" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Cache-Control", "value": "public, max-age=0" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Content-Length", "value": "21331" } ], "cookies": [], "content": { "size": 21331, "mimeType": "image/png", "text": "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", "encoding": "base64" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 21644 }, "cache": {}, "timings": { "blocked": 1.666999996945262, "dns": -1, "ssl": -1, "connect": -1, "send": 0.10699999999999998, "wait": 1.606000012256205, "receive": 0.40699998498894274, "_blocked_queueing": 1.344999996945262 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "other" }, "_priority": "Low", "_resourceType": "image", "connection": "386797", "pageref": "page_1" }, { "startedDateTime": "2019-10-22T02:03:33.213Z", "time": 215.99700000897047, "request": { "method": "GET", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-amz-version-id", "value": "5rbOuhQaTF8rPzC40zBji7q7RIq1d5Ok" }, { "name": "content-encoding", "value": "gzip" }, { "name": "last-modified", "value": "Mon, 15 Jul 2019 19:31:43 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "age", "value": "3973" }, { "name": "date", "value": "Tue, 22 Oct 2019 00:57:21 GMT" }, { "name": "vary", "value": "Accept-Encoding" }, { "name": "x-cache", "value": "Hit from cloudfront" }, { "name": "content-type", "value": "application/javascript" }, { "name": "status", "value": "200" }, { "name": "cache-control", "value": "max-age=10800,public" }, { "name": "x-amz-replication-status", "value": "COMPLETED" }, { "name": "x-amz-cf-pop", "value": "EWR52-C4" }, { "name": "x-amz-cf-id", "value": "xr2SsgQXz3L6ARUNxl94caoWY1GibvCfgo-eHPo0MHXfH7O8xFd7VA==" }, { "name": "via", "value": "1.1 075ecc80ea8e9352008139ab9fd7a593.cloudfront.net (CloudFront)" } ], "cookies": [], "content": { "size": 814173, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 230690 }, "cache": {}, "timings": { "blocked": 38.78400000982918, "dns": 24.215, "ssl": 37.604000000000006, "connect": 77.42399999999999, "send": 0.3919999999999959, "wait": 31.3909999954477, "receive": 43.791000003693625, "_blocked_queueing": 38.47900000982918 }, "serverIPAddress": "99.84.37.139", "_initiator": { "type": "parser", "url": "https://chronicler-notes.auth0.com/login?state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&client=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&protocol=oauth2&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D", "lineNumber": 21 }, "_priority": "High", "_resourceType": "script", "connection": "386854", "pageref": "page_2" }, { "startedDateTime": "2019-10-22T02:03:33.522Z", "time": 119.0679999999702, "request": { "method": "GET", "url": "https://chronicler-notes.auth0.com/img/badge.png", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "Referer", "value": "https://chronicler-notes.auth0.com/login?state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&client=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&protocol=oauth2&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "date", "value": "Tue, 22 Oct 2019 02:03:33 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "last-modified", "value": "Fri, 18 Oct 2019 18:41:21 GMT" }, { "name": "server", "value": "nginx" }, { "name": "ot-tracer-sampled", "value": "true" }, { "name": "etag", "value": "W/\"1dd7-16de02c9468\"" }, { "name": "ot-tracer-traceid", "value": "12c708c22c5ac25e" }, { "name": "vary", "value": "Accept-Encoding" }, { "name": "content-type", "value": "image/png" }, { "name": "status", "value": "200" }, { "name": "cache-control", "value": "public, max-age=0" }, { "name": "strict-transport-security", "value": "max-age=15724800" }, { "name": "x-robots-tag", "value": "noindex, nofollow, nosnippet, noarchive" }, { "name": "x-auth0-requestid", "value": "717597a50317ec7392b1" }, { "name": "ot-tracer-spanid", "value": "1bbd44ca165842bd" } ], "cookies": [], "content": { "size": 7639, "mimeType": "image/png", "text": "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", "encoding": "base64" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 8028 }, "cache": {}, "timings": { "blocked": 1.3890000102687627, "dns": -1, "ssl": -1, "connect": -1, "send": 0.191, "wait": 117.1150000016708, "receive": 0.37299998803064227, "_blocked_queueing": 0.9760000102687627 }, "serverIPAddress": "54.187.133.135", "_initiator": { "type": "script", "stack": { "callFrames": [], "parent": { "description": "Image", "callFrames": [ { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 532061 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 92955 }, { "functionName": "e", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 507052 }, { "functionName": "e", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 644163 }, { "functionName": "", "scriptId": "14", "url": "https://chronicler-notes.auth0.com/login?state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&client=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&protocol=oauth2&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D", "lineNumber": 24, "columnNumber": 15 } ] } } }, "_priority": "High", "_resourceType": "image", "connection": "386837", "pageref": "page_2" }, { "startedDateTime": "2019-10-22T02:03:33.636Z", "time": 455.8250000118278, "request": { "method": "GET", "url": "https://cdn.auth0.com/client/1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe.js?t1571709813634", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [ { "name": "t1571709813634", "value": "" } ], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "date", "value": "Tue, 22 Oct 2019 02:03:33 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "x-auth0-requestid", "value": "fd5ff5db33693ea67a33" }, { "name": "x-amz-cf-pop", "value": "EWR52-C4" }, { "name": "x-cache", "value": "Miss from cloudfront" }, { "name": "status", "value": "200" }, { "name": "strict-transport-security", "value": "max-age=15724800" }, { "name": "server", "value": "nginx" }, { "name": "ot-tracer-sampled", "value": "true" }, { "name": "etag", "value": "W/\"151-Ppyt5cI7YhAMt7R/uCjOZ7MfEEk\"" }, { "name": "ot-tracer-traceid", "value": "3ef40dba64c52791" }, { "name": "vary", "value": "Accept-Encoding" }, { "name": "content-type", "value": "application/x-javascript; charset=utf-8" }, { "name": "via", "value": "1.1 075ecc80ea8e9352008139ab9fd7a593.cloudfront.net (CloudFront)" }, { "name": "cache-control", "value": "public, max-age=60" }, { "name": "x-robots-tag", "value": "noindex, nofollow, nosnippet, noarchive" }, { "name": "x-amz-cf-id", "value": "YKfucaEj9_YHV_H7bii03cttwDcyaO1huWO8WjbdJgVVaps-stZNwg==" }, { "name": "ot-tracer-spanid", "value": "5d01e6f9793e788f" } ], "cookies": [], "content": { "size": 337, "mimeType": "application/x-javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 758 }, "cache": {}, "timings": { "blocked": 8.992000003045424, "dns": -1, "ssl": -1, "connect": -1, "send": 0.272, "wait": 445.488999995118, "receive": 1.0720000136643648, "_blocked_queueing": 8.520000003045425 }, "serverIPAddress": "99.84.37.139", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 164868 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 599554 }, { "functionName": "syncFn", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 600097 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 107868 }, { "functionName": "D", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 107734 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 21114 }, { "functionName": "St", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 31079 }, { "functionName": "St", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 31169 }, { "functionName": "St", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 31169 }, { "functionName": "pt.updateIn", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 52685 }, { "functionName": "a", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 21064 }, { "functionName": "t.swap", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687254 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 20938 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 108353 } ], "parent": { "description": "setTimeout", "callFrames": [ { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 108316 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 20872 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687609 }, { "functionName": "t._change", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687578 }, { "functionName": "t.swap", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687244 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 20938 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 93109 }, { "functionName": "e", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 507052 }, { "functionName": "e", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 644163 }, { "functionName": "", "scriptId": "14", "url": "https://chronicler-notes.auth0.com/login?state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&client=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&protocol=oauth2&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D", "lineNumber": 24, "columnNumber": 15 } ] } } }, "_priority": "Low", "_resourceType": "script", "connection": "386854", "pageref": "page_2" }, { "startedDateTime": "2019-10-22T02:03:34.115Z", "time": 114.89599998458289, "request": { "method": "GET", "url": "https://chronicler-notes.auth0.com/user/ssodata", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://chronicler-notes.auth0.com/login?state=g6Fo2SA4YmF2WjMya0dtUXl2c0VrRE5iR3Q1MzdDc1RyYjEtcaN0aWTZIFVmRmFfa2Q3d1Z2TFlnQkUwcDJLQVJfWXpJLUtxQTVwo2NpZNkgMUFXNVl3NEJjaTZLdmtCcEdsOFBTRmtDaXFldHRSVmU&client=1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe&protocol=oauth2&response_type=token%20id_token&redirect_uri=http%3A%2F%2Fdev.chronicler-notes.com%3A8000%2Fcallback&scope=openid%20profile%20email&audience=https%3A%2F%2Fchronicler-notes.auth0.com%2Fuserinfo&nonce=z94ilIM3Ks130SAvt9MZusSdL2xpnT2J&auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xMS4zIn0%3D" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 404, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "date", "value": "Tue, 22 Oct 2019 02:03:34 GMT" }, { "name": "x-auth0-requestid", "value": "0bd2dd68cb992bec3685" }, { "name": "ot-tracer-sampled", "value": "true" }, { "name": "ot-tracer-traceid", "value": "5afd00da7766efb2" }, { "name": "status", "value": "404" }, { "name": "cache-control", "value": "private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-transform" }, { "name": "content-length", "value": "0" }, { "name": "server", "value": "nginx" }, { "name": "ot-tracer-spanid", "value": "1baf8baa18485b11" } ], "cookies": [], "content": { "size": 0, "mimeType": "text/plain" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 232 }, "cache": {}, "timings": { "blocked": 1.9709999959040432, "dns": -1, "ssl": -1, "connect": -1, "send": 0.20000000000000007, "wait": 111.565000003431, "receive": 1.1599999852478504, "_blocked_queueing": 1.1269999959040433 }, "serverIPAddress": "54.187.133.135", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "u._end", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 233445 }, { "functionName": "u.end", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 232186 }, { "functionName": "W.end", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 235653 }, { "functionName": "Vt.getSSOData", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 286522 }, { "functionName": "Kt.getSSOData", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 302295 }, { "functionName": "t.getSSOData", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 606512 }, { "functionName": "t.getSSOData", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 118461 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 601360 }, { "functionName": "t.fetch", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 688127 }, { "functionName": "t.get", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 688059 }, { "functionName": "r", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 601267 }, { "functionName": "syncFn", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 600328 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 107868 }, { "functionName": "D", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 107734 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 21114 }, { "functionName": "St", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 31079 }, { "functionName": "St", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 31169 }, { "functionName": "St", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 31169 }, { "functionName": "pt.updateIn", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 52685 }, { "functionName": "a", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 21064 }, { "functionName": "t.swap", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687254 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 20938 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 108353 } ], "parent": { "description": "setTimeout", "callFrames": [ { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 108316 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 20872 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687609 }, { "functionName": "t._change", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687578 }, { "functionName": "t.swap", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687244 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 20938 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 108353 } ], "parent": { "description": "setTimeout", "callFrames": [ { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 108316 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 20872 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687609 }, { "functionName": "t._change", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687578 }, { "functionName": "t.swap", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 687244 }, { "functionName": "i", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 20938 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 107924 } ], "parent": { "description": "setTimeout", "callFrames": [ { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 107894 }, { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 164645 } ], "parent": { "description": "setTimeout", "callFrames": [ { "functionName": "", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 164611 }, { "functionName": "i..t.Auth0.", "scriptId": "13", "url": "https://cdn.auth0.com/js/lock/11.16/lock.min.js", "lineNumber": 8, "columnNumber": 164564 }, { "functionName": "", "scriptId": "15", "url": "https://cdn.auth0.com/client/1AW5Yw4Bci6KvkBpGl8PSFkCiqettRVe.js?t1571709813634", "lineNumber": 0, "columnNumber": 6 } ] } } } } } }, "_priority": "High", "_resourceType": "xhr", "connection": "386837", "pageref": "page_2" }, { "startedDateTime": "2019-10-22T02:03:37.253Z", "time": 197.58900001494214, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/frameworks-2fd1891c9e6292401a1a3de8bc3f747f.css", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "a2394188c1c23cefc05b949df576018dfbd390e0" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:37 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "278136" }, { "name": "x-cache", "value": "HIT, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "24724" }, { "name": "x-served-by", "value": "cache-iad2142-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Fri, 18 Oct 2019 20:45:50 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709817.369733,VS0,VE0" }, { "name": "etag", "value": "\"f8747f35f828c0dac9f4b38f99c6b648\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "text/css" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "2, 14261" } ], "cookies": [], "content": { "size": 144869, "mimeType": "text/css" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 25102 }, "cache": {}, "timings": { "blocked": 12.547999993350357, "dns": 28.12, "ssl": 26.613000000000007, "connect": 69.503, "send": 3.218999999999994, "wait": 81.39399999604561, "receive": 2.805000025546178, "_blocked_queueing": 12.359999993350357 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "lineNumber": 19 }, "_priority": "VeryHigh", "_resourceType": "stylesheet", "connection": "386928", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:37.253Z", "time": 169.41299999598414, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/site-09367dd1ae1784b858e71c8471ca0949.css", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "e06504858a4b1e16159693d6b9ea48b44b18b88f" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:37 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "459211" }, { "name": "x-cache", "value": "HIT, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "14098" }, { "name": "x-served-by", "value": "cache-iad2131-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Wed, 16 Oct 2019 18:28:04 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709817.369742,VS0,VE0" }, { "name": "etag", "value": "\"70ca6d718865cca59d016f508186eaa2\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "text/css" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "1, 17218" } ], "cookies": [], "content": { "size": 80665, "mimeType": "text/css" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 14290 }, "cache": {}, "timings": { "blocked": 84.48699999118783, "dns": -1, "ssl": -1, "connect": -1, "send": 0.5309999999999917, "wait": 80.92500000878238, "receive": 3.4699999960139394, "_blocked_queueing": 15.512999991187826 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "lineNumber": 20 }, "_priority": "VeryHigh", "_resourceType": "stylesheet", "connection": "386928", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:37.253Z", "time": 168.8080000167247, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/github-211e7a5168e3492fd5f3d4312f92593c.css", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "b03c08c01031082ff7a7f646eefdc6b88cdc76aa" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:37 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "7878" }, { "name": "x-cache", "value": "HIT, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "75291" }, { "name": "x-served-by", "value": "cache-iad2129-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Mon, 21 Oct 2019 23:50:14 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709817.369677,VS0,VE0" }, { "name": "etag", "value": "\"c0a45402116453cc87f54a820a52aad9\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "text/css" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "1, 779" } ], "cookies": [], "content": { "size": 397812, "mimeType": "text/css" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 75531 }, "cache": {}, "timings": { "blocked": 84.38700001925416, "dns": -1, "ssl": -1, "connect": -1, "send": 0.4620000000000033, "wait": 44.838999996194616, "receive": 39.12000000127591, "_blocked_queueing": 23.849000019254163 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "lineNumber": 21 }, "_priority": "VeryHigh", "_resourceType": "stylesheet", "connection": "386928", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:37.253Z", "time": 69.93200001306832, "request": { "method": "GET", "url": "https://github.com/identicons/app/oauth_app/1156266", "httpVersion": "http/1.1", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "Referer", "value": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:37 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Status", "value": "200 OK" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000; includeSubdomains; preload" }, { "name": "X-XSS-Protection", "value": "1; mode=block" }, { "name": "X-Request-Id", "value": "7a6f64bf-8da6-4da6-a7d8-2e9b6656f500" }, { "name": "Referrer-Policy", "value": "origin-when-cross-origin, strict-origin-when-cross-origin" }, { "name": "Server", "value": "GitHub.com" }, { "name": "X-GitHub-Request-Id", "value": "DD85:7ABB:8C245:12F9E1:5DAE6379" }, { "name": "X-Frame-Options", "value": "deny" }, { "name": "ETag", "value": "W/\"ee9b60dd328d84595c0cbbbc308e03e8\"" }, { "name": "Expect-CT", "value": "max-age=2592000, report-uri=\"https://api.github.com/_private/browser/errors\"" }, { "name": "Vary", "value": "X-PJAX" }, { "name": "Content-Type", "value": "image/svg+xml; charset=utf-8" }, { "name": "Cache-Control", "value": "public" }, { "name": "Content-Security-Policy", "value": "default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; frame-src render.githubusercontent.com; img-src 'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self'; media-src 'none'; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com" } ], "cookies": [], "content": { "size": 941, "mimeType": "image/svg+xml", "text": "ICA8c3ZnIHZpZXdCb3g9IjAgMCAzNTAgMzUwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjM1MCIgaGVpZ2h0PSIzNTAiIHN0eWxlPSJmaWxsOiAjZjljNTEzIiAvPgogICAgICAgICAgPHJlY3QgeD0iNzAiIHk9IjI4MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjcwIiBzdHlsZT0iZmlsbDogI2ZmZmJkZCIgLz4KICAgICAgICAgICAgPHJlY3QgeD0iMjEwIiB5PSIyODAiIHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgc3R5bGU9ImZpbGw6ICNmZmZiZGQiIC8+CiAgICAgICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHN0eWxlPSJmaWxsOiAjZmZmYmRkIiAvPgogICAgICAgICAgICA8cmVjdCB4PSIyODAiIHk9IjAiIHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgc3R5bGU9ImZpbGw6ICNmZmZiZGQiIC8+CiAgICAgICAgICA8cmVjdCB4PSIwIiB5PSI3MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjcwIiBzdHlsZT0iZmlsbDogI2ZmZmJkZCIgLz4KICAgICAgICAgICAgPHJlY3QgeD0iMjgwIiB5PSI3MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjcwIiBzdHlsZT0iZmlsbDogI2ZmZmJkZCIgLz4KICAgICAgICAgIDxyZWN0IHg9IjAiIHk9IjE0MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjcwIiBzdHlsZT0iZmlsbDogI2ZmZmJkZCIgLz4KICAgICAgICAgICAgPHJlY3QgeD0iMjgwIiB5PSIxNDAiIHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgc3R5bGU9ImZpbGw6ICNmZmZiZGQiIC8+CiAgICAgICAgICA8cmVjdCB4PSIwIiB5PSIyMTAiIHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgc3R5bGU9ImZpbGw6ICNmZmZiZGQiIC8+CiAgICAgICAgICAgIDxyZWN0IHg9IjI4MCIgeT0iMjEwIiB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHN0eWxlPSJmaWxsOiAjZmZmYmRkIiAvPgogIDwvc3ZnPgo=", "encoding": "base64" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 3273 }, "cache": {}, "timings": { "blocked": 27.435999996466563, "dns": -1, "ssl": -1, "connect": -1, "send": 0.20499999999999996, "wait": 41.34100000058301, "receive": 0.9500000160187483, "_blocked_queueing": 27.155999996466562 }, "serverIPAddress": "192.30.253.113", "_initiator": { "type": "parser", "url": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "lineNumber": 172 }, "_priority": "High", "_resourceType": "image", "connection": "386896", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:37.254Z", "time": 179.88299997523427, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "c3a32629d3f69c1cb39c07e7118ba83baca82ea3" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:37 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "2928" }, { "name": "x-cache", "value": "MISS, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "49480" }, { "name": "x-served-by", "value": "cache-iad2121-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Tue, 22 Oct 2019 01:12:42 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709817.369696,VS0,VE0" }, { "name": "etag", "value": "\"ca24e48ce7d5650551fcf519fc00ba21\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "application/javascript" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "0, 270" } ], "cookies": [], "content": { "size": 151404, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 49950 }, "cache": {}, "timings": { "blocked": 84.14899999942259, "dns": -1, "ssl": -1, "connect": -1, "send": 0.3130000000000024, "wait": 44.404000014236196, "receive": 51.01699996157549, "_blocked_queueing": 33.50499999942258 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "lineNumber": 232 }, "_priority": "Medium", "_resourceType": "script", "connection": "386928", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:37.254Z", "time": 197.71199999377131, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "eee6d16ec00f563830785d04b51185b438451c7c" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:37 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "2928" }, { "name": "x-cache", "value": "MISS, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "124845" }, { "name": "x-served-by", "value": "cache-iad2120-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Tue, 22 Oct 2019 01:12:43 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709817.369735,VS0,VE0" }, { "name": "etag", "value": "\"67cb0d1864b65a289eae6c97e1d4389d\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "application/javascript" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "0, 264" } ], "cookies": [], "content": { "size": 497806, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 125131 }, "cache": {}, "timings": { "blocked": 83.33099999217876, "dns": -1, "ssl": -1, "connect": -1, "send": 0.39000000000000057, "wait": 81.90400000200049, "receive": 32.08699999959208, "_blocked_queueing": 40.87699999217875 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/login?client_id=0246739cfbc9f17c5af6&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%3D0246739cfbc9f17c5af6%26redirect_uri%3Dhttps%253A%252F%252Fchronicler-notes.auth0.com%252Flogin%252Fcallback%26response_type%3Dcode%26scope%3Drepo%26state%3Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "lineNumber": 234 }, "_priority": "Low", "_resourceType": "script", "connection": "386928", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:37.699Z", "time": 394.51399999734195, "request": { "method": "POST", "url": "https://www.google-analytics.com/r/collect", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Content-Type", "value": "text/plain;charset=UTF-8" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 282, "postData": { "mimeType": "text/plain;charset=UTF-8", "text": "v=1&_v=j48&a=258297806&t=pageview&_s=1&dl=https%3A%2F%2Fgithub.com%2Flogin&ul=en-us&de=UTF-8&dt=Sign%20in%20to%20GitHub%20%C2%B7%20GitHub&sd=24-bit&sr=1440x900&vp=689x766&je=0&_u=SGAAAEABM~&jid=2096884770&cid=1816580976.1571709818&tid=UA-3769691-2&_r=1&cd1=Logged%20Out&z=1200009034" } }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "pragma", "value": "no-cache" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:38 GMT" }, { "name": "x-content-type-options", "value": "nosniff" }, { "name": "last-modified", "value": "Sun, 17 May 1998 03:00:00 GMT" }, { "name": "server", "value": "Golfe2" }, { "name": "access-control-allow-origin", "value": "https://github.com" }, { "name": "content-type", "value": "image/gif" }, { "name": "status", "value": "200" }, { "name": "cache-control", "value": "no-cache, no-store, must-revalidate" }, { "name": "access-control-allow-credentials", "value": "true" }, { "name": "alt-svc", "value": "quic=\":443\"; ma=2592000; v=\"46,43\",h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000" }, { "name": "content-length", "value": "35" }, { "name": "expires", "value": "Fri, 01 Jan 1990 00:00:00 GMT" } ], "cookies": [], "content": { "size": 35, "mimeType": "image/gif" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 369 }, "cache": {}, "timings": { "blocked": 257.73800001968254, "dns": 13.418, "ssl": 56.218, "connect": 84.224, "send": 1.4959999999999951, "wait": 36.367999998828395, "receive": 1.2699999788310379, "_blocked_queueing": 257.55900001968257 }, "serverIPAddress": "[2607:f8b0:4006:805::200e]", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "N", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 95516 }, { "functionName": "B", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 96555 }, { "functionName": "", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 191066 }, { "functionName": "q.D", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 97414 }, { "functionName": "jn.send", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 113367 }, { "functionName": "Ue.e.", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 102266 }, { "functionName": "Yn.v", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 118605 }, { "functionName": "Yn.D", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 118050 }, { "functionName": "zn", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 118660 }, { "functionName": "an", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 11686 }, { "functionName": "Zi", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 189470 }, { "functionName": "", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 191464 } ], "parent": { "description": "async function", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 191456 }, { "functionName": "execute", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 191469 }, { "functionName": "", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 337 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "register", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 325 }, { "functionName": "", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 620 } ] } } } }, "_priority": "VeryLow", "_resourceType": "other", "connection": "386966", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:37.979Z", "time": 189.06099999075195, "request": { "method": "GET", "url": "https://collector.githubapp.com/github/page_view?dimensions[page]=https%3A%2F%2Fgithub.com%2Flogin%3Fclient_id%3D0246739cfbc9f17c5af6%26return_to%3D%252Flogin%252Foauth%252Fauthorize%253Fclient_id%253D0246739cfbc9f17c5af6%2526redirect_uri%253Dhttps%25253A%25252F%25252Fchronicler-notes.auth0.com%25252Flogin%25252Fcallback%2526response_type%253Dcode%2526scope%253Drepo%2526state%253Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq&dimensions[title]=Sign%20in%20to%20GitHub%20%C2%B7%20GitHub&dimensions[referrer]=&dimensions[user_agent]=Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_14_6)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F77.0.3865.120%20Safari%2F537.36&dimensions[screen_resolution]=1440x900&dimensions[pixel_ratio]=2&dimensions[browser_resolution]=689x766&dimensions[tz_seconds]=-14400&dimensions[timestamp]=1571709817978&dimensions[request_id]=DD85%3A7ABB%3A8C240%3A12F9DB%3A5DAE6379&dimensions[region_edge]=iad&dimensions[region_render]=iad&dimensions[ga_id]=1816580976.1571709818&dimensions[visitor_id]=740246527094449017&&measures[performance_timing]=1-424-424-1032-857-855-855-566-424-424-424--1032-0---432-495-494---&&&dimensions[cid]=172352075.1571709817", "httpVersion": "http/1.1", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [ { "name": "dimensions[page]", "value": "https%3A%2F%2Fgithub.com%2Flogin%3Fclient_id%3D0246739cfbc9f17c5af6%26return_to%3D%252Flogin%252Foauth%252Fauthorize%253Fclient_id%253D0246739cfbc9f17c5af6%2526redirect_uri%253Dhttps%25253A%25252F%25252Fchronicler-notes.auth0.com%25252Flogin%25252Fcallback%2526response_type%253Dcode%2526scope%253Drepo%2526state%253Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" }, { "name": "dimensions[title]", "value": "Sign%20in%20to%20GitHub%20%C2%B7%20GitHub" }, { "name": "dimensions[referrer]", "value": "" }, { "name": "dimensions[user_agent]", "value": "Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_14_6)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F77.0.3865.120%20Safari%2F537.36" }, { "name": "dimensions[screen_resolution]", "value": "1440x900" }, { "name": "dimensions[pixel_ratio]", "value": "2" }, { "name": "dimensions[browser_resolution]", "value": "689x766" }, { "name": "dimensions[tz_seconds]", "value": "-14400" }, { "name": "dimensions[timestamp]", "value": "1571709817978" }, { "name": "dimensions[request_id]", "value": "DD85%3A7ABB%3A8C240%3A12F9DB%3A5DAE6379" }, { "name": "dimensions[region_edge]", "value": "iad" }, { "name": "dimensions[region_render]", "value": "iad" }, { "name": "dimensions[ga_id]", "value": "1816580976.1571709818" }, { "name": "dimensions[visitor_id]", "value": "740246527094449017" }, { "name": "", "value": "" }, { "name": "measures[performance_timing]", "value": "1-424-424-1032-857-855-855-566-424-424-424--1032-0---432-495-494---" }, { "name": "", "value": "" }, { "name": "", "value": "" }, { "name": "dimensions[cid]", "value": "172352075.1571709817" } ], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:38 GMT" }, { "name": "Last-Modified", "value": "Tue, 22 Oct 2019 02:03:38 GMT" }, { "name": "Server", "value": "GitHub.com" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000" }, { "name": "Content-Type", "value": "image/gif; charset=utf-8" }, { "name": "X-Request-Id", "value": "c41f3d1cb17846ede70194003cbc66db" }, { "name": "Cache-Control", "value": "no-store, no-cache, must-revalidate, private" }, { "name": "transfer-encoding", "value": "chunked" }, { "name": "X-UA-Compatible", "value": "IE=Edge,chrome=1" }, { "name": "Connection", "value": "keep-alive" }, { "name": "X-Runtime", "value": "0.002264" }, { "name": "X-Rack-Cache", "value": "miss" }, { "name": "Expires", "value": "Sat, 25 Nov 2000 05:00:00 GMT" } ], "cookies": [], "content": { "size": 35, "mimeType": "image/gif", "text": "R0lGODlhAQABAID/AP///wAAACwAAAAAAQABAAACAkQBADs=", "encoding": "base64" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 548 }, "cache": {}, "timings": { "blocked": 1.391999985581264, "dns": 18.116, "ssl": 76.022, "connect": 130.435, "send": 0.16899999999998272, "wait": 38.081000002359986, "receive": 0.8680000028107315, "_blocked_queueing": 1.117999985581264 }, "serverIPAddress": "52.71.145.185", "_initiator": { "type": "script", "stack": { "callFrames": [], "parent": { "description": "Image", "callFrames": [ { "functionName": "recordPageView", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 147731 }, { "functionName": "applyCall", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 152900 }, { "functionName": "push", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 148449 }, { "functionName": "", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 254508 } ], "parent": { "description": "async function", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 254446 }, { "functionName": "execute", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 254533 }, { "functionName": "", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 337 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "register", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 325 }, { "functionName": "", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 620 } ] } } } } }, "_priority": "Low", "_resourceType": "image", "connection": "386981", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:38.014Z", "time": 166.38599998275748, "request": { "method": "POST", "url": "https://api.github.com/_private/browser/stats", "httpVersion": "http/1.1", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Content-Type", "value": "text/plain;charset=UTF-8" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 1266, "postData": { "mimeType": "text/plain;charset=UTF-8", "text": "{\"stats\":[{\"downloadedBundles\":[\"frameworks.css\",\"site.css\",\"github.css\"],\"timestamp\":1571709817976},{\"resourceTimings\":[{\"name\":\"https://github.githubassets.com/assets/frameworks-2fd1891c9e6292401a1a3de8bc3f747f.css\",\"entryType\":\"resource\",\"startTime\":582.1200000063982,\"duration\":169.4499999866821},{\"name\":\"https://github.githubassets.com/assets/site-09367dd1ae1784b858e71c8471ca0949.css\",\"entryType\":\"resource\",\"startTime\":582.3699999891687,\"duration\":169.40000001341105},{\"name\":\"https://github.githubassets.com/assets/github-211e7a5168e3492fd5f3d4312f92593c.css\",\"entryType\":\"resource\",\"startTime\":582.5299999851268,\"duration\":168.81000000284985},{\"name\":\"https://github.com/identicons/app/oauth_app/1156266\",\"entryType\":\"resource\",\"startTime\":582.7049999788869,\"duration\":69.93000002694316},{\"name\":\"https://github.githubassets.com/assets/frameworks-e9d484b7.js\",\"entryType\":\"resource\",\"startTime\":582.9199999861885,\"duration\":179.88000001059845},{\"name\":\"https://github.githubassets.com/assets/github-bootstrap-276b2659.js\",\"entryType\":\"resource\",\"startTime\":583.6649999837391,\"duration\":197.70499999867752}],\"timestamp\":1571709817987},{\"navigationTimings\":[{\"entryType\":\"navigation\",\"startTime\":0,\"duration\":1310.2499999804422}],\"timestamp\":1571709817988}]}" } }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:38 GMT" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "X-GitHub-Media-Type", "value": "github.v3; format=json" }, { "name": "Status", "value": "200 OK" }, { "name": "X-RateLimit-Remaining", "value": "60" }, { "name": "Content-Length", "value": "5" }, { "name": "X-XSS-Protection", "value": "1; mode=block" }, { "name": "Referrer-Policy", "value": "origin-when-cross-origin, strict-origin-when-cross-origin" }, { "name": "Server", "value": "GitHub.com" }, { "name": "X-GitHub-Request-Id", "value": "DD93:482B:9DEEE:1908AE:5DAE637A" }, { "name": "X-Frame-Options", "value": "deny" }, { "name": "Content-Security-Policy", "value": "default-src 'none'" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000; includeSubdomains; preload" }, { "name": "Content-Type", "value": "application/json; charset=utf-8" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Access-Control-Expose-Headers", "value": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "X-RateLimit-Reset", "value": "1571713418" }, { "name": "X-RateLimit-Limit", "value": "60" } ], "cookies": [], "content": { "size": 5, "mimeType": "application/json" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 903 }, "cache": {}, "timings": { "blocked": 1.3259999981019646, "dns": 24.200000000000003, "ssl": 37.548, "connect": 81.593, "send": 0.21699999999999875, "wait": 58.42200000488572, "receive": 0.627999979769811, "_blocked_queueing": 1.1119999981019646 }, "serverIPAddress": "192.30.253.116", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "ce", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 37754 } ], "parent": { "description": "requestIdleCallback", "callFrames": [ { "functionName": "", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 37548 } ], "parent": { "description": "async function", "callFrames": [ { "functionName": "", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 37518 }, { "functionName": "se", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 37573 }, { "functionName": "", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 76588 } ], "parent": { "description": "async function", "callFrames": [ { "functionName": "", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 75985 }, { "functionName": "execute", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 76614 }, { "functionName": "", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 337 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "register", "scriptId": "13", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 325 }, { "functionName": "", "scriptId": "14", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 620 } ] } } } } } }, "_priority": "VeryLow", "_resourceType": "other", "connection": "386990", "pageref": "page_3" }, { "startedDateTime": "2019-10-22T02:03:42.918Z", "time": 26.084000011906028, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/frameworks-2fd1891c9e6292401a1a3de8bc3f747f.css", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "70b207cdec1084054e9149bca3e3b4bc269440e9" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:42 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "278141" }, { "name": "x-cache", "value": "HIT, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "24724" }, { "name": "x-served-by", "value": "cache-iad2142-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Fri, 18 Oct 2019 20:45:50 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709823.927223,VS0,VE0" }, { "name": "etag", "value": "\"f8747f35f828c0dac9f4b38f99c6b648\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "text/css" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "2, 14263" } ], "cookies": [], "content": { "size": 144869, "mimeType": "text/css" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 25079 }, "cache": {}, "timings": { "blocked": 4.8200000094808635, "dns": -1, "ssl": -1, "connect": -1, "send": 1.342, "wait": 17.534999987419695, "receive": 2.3870000150054693, "_blocked_queueing": 4.305000009480864 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/sessions/two-factor", "lineNumber": 19 }, "_priority": "VeryHigh", "_resourceType": "stylesheet", "connection": "386928", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:42.918Z", "time": 25.58299998054281, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/site-09367dd1ae1784b858e71c8471ca0949.css", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "7c20f461ef887b5af33c6d41cc5d2c0312dca1cb" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:42 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "459216" }, { "name": "x-cache", "value": "HIT, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "14098" }, { "name": "x-served-by", "value": "cache-iad2131-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Wed, 16 Oct 2019 18:28:04 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709823.927261,VS0,VE0" }, { "name": "etag", "value": "\"70ca6d718865cca59d016f508186eaa2\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "text/css" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "1, 17219" } ], "cookies": [], "content": { "size": 80665, "mimeType": "text/css" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 14328 }, "cache": {}, "timings": { "blocked": 4.732999991543591, "dns": -1, "ssl": -1, "connect": -1, "send": 1.237, "wait": 16.433999996911734, "receive": 3.1789999920874834, "_blocked_queueing": 4.294999991543591 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/sessions/two-factor", "lineNumber": 20 }, "_priority": "VeryHigh", "_resourceType": "stylesheet", "connection": "386928", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:42.919Z", "time": 34.20600001118146, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/github-211e7a5168e3492fd5f3d4312f92593c.css", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "0b2316c21a30669463ba7ce2a419b733d8d81196" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:42 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "7884" }, { "name": "x-cache", "value": "HIT, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "75291" }, { "name": "x-served-by", "value": "cache-iad2129-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Mon, 21 Oct 2019 23:50:14 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709823.927430,VS0,VE0" }, { "name": "etag", "value": "\"c0a45402116453cc87f54a820a52aad9\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "text/css" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "1, 780" } ], "cookies": [], "content": { "size": 397812, "mimeType": "text/css" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 75515 }, "cache": {}, "timings": { "blocked": 5.557999992564321, "dns": -1, "ssl": -1, "connect": -1, "send": 0.794, "wait": 18.657000011937694, "receive": 9.197000006679446, "_blocked_queueing": 4.340999992564321 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/sessions/two-factor", "lineNumber": 21 }, "_priority": "VeryHigh", "_resourceType": "stylesheet", "connection": "386928", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:42.919Z", "time": 55.726999999023974, "request": { "method": "GET", "url": "https://github.githubassets.com/images/spinners/octocat-spinner-32.gif", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "00defbeefe9d536babadef13d46b9cce6ddda702" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:42 GMT" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "age", "value": "2161" }, { "name": "x-cache", "value": "HIT, HIT" }, { "name": "status", "value": "200" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "content-length", "value": "2308" }, { "name": "x-served-by", "value": "cache-iad2125-IAD, cache-lga21924-LGA" }, { "name": "last-modified", "value": "Wed, 12 Dec 2018 18:17:07 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709823.928155,VS0,VE0" }, { "name": "etag", "value": "\"a275d0ff02eb0e006fa365f2f725b010\"" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "image/gif" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "2, 13" } ], "cookies": [], "content": { "size": 2308, "mimeType": "image/gif", "text": "R0lGODlhIAAgAPIHAIKCgrOzs8zMzMrKyuLi4pmZmfj4+P///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExODcxRjk1OUM5NDdDMUYyMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxQzYwRTc2RDU0RTIxMUUxOTgyOUQyOEIyQjYxRkU0MCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxQzYwRTc2QzU0RTIxMUUxOTgyOUQyOEIyQjYxRkU0MCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAzODAxMTc0MDcyMDY4MTE4NzFGOTU5Qzk0N0MxRjIzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE4NzFGOTU5Qzk0N0MxRjIzIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEBQoABwAsAAAAACAAIAAAA/94umwUpQAQAzEs62Xc/CBwYZtmCEVgVIMgDFDhCFfJxTJpnkOrm5HUr+ToCYaKVYRg2xBex4whdiHUbI4R9IcqCA4GY9VKnvUwhB4zWVGke/C4fLBOR8EQUnjOPydpGA5gHH19OoEOASp/hXx3PE8BAwtvjXNrBy9pAV9ulnyYdoqhn5eULaOnpXGkAqmeq3Ctr2CxcDp2MJ0KL7G7B3aukxy9n3e8dA+LHJWFV4xVgw56VsUtVkiIYE+Bxzxwxw2A0G5R33G/p8dvTOeOGuziPtsufVJb99cM9pT4Jr1X+BWZR6TXkT1zOhhEIuXJBWvoZjxrAqZDow4MKXZ4YhAFUEYFCQAAIfkEBQoABwAsAAAAAB8AFgAAA2d4uqwToRQ4mr1M6l0OwRcRVIEimEoZABXoQKV7AHQHwqec0sBnwbrGgGd5xIIMQi0J8SEZAlrrAMk9GyvA4nHFAAofQzc4sI5D5TNIMHCqG+w3Ji630OvQKd7U3i8IaX4OZntiggcJACH5BAUKAAcALAIAAAAeAB4AAAODeLprJGIMSAy7mBnJ+zBWlgkVRZwnpBSCuESTuxR04MKEfNFFyEQt3UXAG058QkaNIUm6aMFIzimiKR7UZwCZdU27T0AQnCkAbORMAFBIZwYAgBsjiM+H9vsCLtcr1m1+B2ZofmZjfl96AYh3AgGFi5FzBJADgpCTaY+QfpmXfgOaCgkAIfkEBQoABgAsFgACAAoAHQAAA0k4QdZuIY7nRAy0kZub7NvSWVgXTF3qBAWTsSg1FCUlFEWK63l29zKaqRB7sFwqCkBECQAAvmex8QQ2BE+osYo0ZK2NAmCqUSUAACH5BAUKAAcALAoAAgAWAB4AAANfeLqsJC1KJcaAMx9isZ6V9zVGOE7WKXGiShFufAbyMgStKgRDvQW0GgHoGwZlRt+uV7vlVEefrxAwTAvX56dARXKxsq/V9Y0uCgAqMIAuGNhPAmBOrxPGkyF3zg3ANAkAIfkEBQoABwAsAQAKAB8AFgAAA2J4utz+x8BJlRg1u0u0P8QgfJ5IauZZperEtk44wg9H19j9SEQA6IfA7AAABG6CwFExKA5PvUBnUShOT8ocowjQepTLBoEbriSVlGoxA/ZCmstCOVBgSj+dgn7Pvw2UelkZCQAh+QQFCgAHACwAAAoAHgAWAAADYmh03P4wClCivS1QzGEBQScyADCMYimgncpy5fleXzhbWnVL2x4tvoghoAsKgIXijjBYHQTJ4EDGICpRBkHzkSw4Udpvw9BFMbe4MkeLvkCrgcB0Gg8oxBxFfV/3seNTeA8JACH5BAUKAAcALAAAAQAWAB8AAANoeLpL/JANEKJdBegbSaZcpAFCCH2OKWmlymiV2wSAbF9efA+FbgeFwU1RKLRuxSGxoDwUj7+gkueT5ZpYxaAqCwSgVm9q5216A+OfF+zaloeEwMAgGNjvdvbDgO/PQwYEAnUDgwQGBgkAOw==", "encoding": "base64" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 2562 }, "cache": {}, "timings": { "blocked": 5.737000007990748, "dns": -1, "ssl": -1, "connect": -1, "send": 0.46799999999999997, "wait": 42.611999994609505, "receive": 6.909999996423721, "_blocked_queueing": 4.580000007990748 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/sessions/two-factor", "lineNumber": 202 }, "_priority": "Low", "_resourceType": "image", "connection": "386928", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:42.919Z", "time": 64.29799998295493, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "8eac224724a4be91794ff86a1509de7cbb911f73" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:42 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "2933" }, { "name": "x-cache", "value": "MISS, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "49480" }, { "name": "x-served-by", "value": "cache-iad2121-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Tue, 22 Oct 2019 01:12:42 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709823.928217,VS0,VE0" }, { "name": "etag", "value": "\"ca24e48ce7d5650551fcf519fc00ba21\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "application/javascript" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "0, 271" } ], "cookies": [], "content": { "size": 151404, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 49780 }, "cache": {}, "timings": { "blocked": 5.995999990781769, "dns": -1, "ssl": -1, "connect": -1, "send": 0.33699999999999997, "wait": 41.80099999160133, "receive": 16.164000000571832, "_blocked_queueing": 5.001999990781769 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/sessions/two-factor", "lineNumber": 239 }, "_priority": "Medium", "_resourceType": "script", "connection": "386928", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:42.919Z", "time": 65.12400001520291, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "865d054c8d1c60ba5e9254c9710092fc7dfb950e" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:42 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "2933" }, { "name": "x-cache", "value": "MISS, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "124845" }, { "name": "x-served-by", "value": "cache-iad2120-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Tue, 22 Oct 2019 01:12:43 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709823.928137,VS0,VE0" }, { "name": "etag", "value": "\"67cb0d1864b65a289eae6c97e1d4389d\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "application/javascript" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "0, 265" } ], "cookies": [], "content": { "size": 497806, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 125153 }, "cache": {}, "timings": { "blocked": 5.918000002656132, "dns": -1, "ssl": -1, "connect": -1, "send": 0.256, "wait": 25.11699998939596, "receive": 33.83300002315082, "_blocked_queueing": 5.252000002656132 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/sessions/two-factor", "lineNumber": 241 }, "_priority": "Low", "_resourceType": "script", "connection": "386928", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:43.224Z", "time": 53.14800000633113, "request": { "method": "POST", "url": "https://www.google-analytics.com/collect", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Content-Type", "value": "text/plain;charset=UTF-8" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 304, "postData": { "mimeType": "text/plain;charset=UTF-8", "text": "v=1&_v=j48&a=744102258&t=pageview&_s=1&dl=https%3A%2F%2Fgithub.com%2Fsessions%2Ftwo-factor&ul=en-us&de=UTF-8&dt=GitHub%20%C2%B7%20Where%20software%20is%20built&sd=24-bit&sr=1440x900&vp=689x766&je=0&_u=SCCAAEABM~&jid=&cid=1816580976.1571709818&tid=UA-3769691-2&cd5=Logged%20In&cd1=Logged%20Out&z=655264455" } }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "pragma", "value": "no-cache" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:43 GMT" }, { "name": "x-content-type-options", "value": "nosniff" }, { "name": "last-modified", "value": "Sun, 17 May 1998 03:00:00 GMT" }, { "name": "server", "value": "Golfe2" }, { "name": "access-control-allow-origin", "value": "https://github.com" }, { "name": "content-type", "value": "image/gif" }, { "name": "status", "value": "200" }, { "name": "cache-control", "value": "no-cache, no-store, must-revalidate" }, { "name": "access-control-allow-credentials", "value": "true" }, { "name": "alt-svc", "value": "quic=\":443\"; ma=2592000; v=\"46,43\",h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000" }, { "name": "content-length", "value": "35" }, { "name": "expires", "value": "Fri, 01 Jan 1990 00:00:00 GMT" } ], "cookies": [], "content": { "size": 35, "mimeType": "image/gif" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 102 }, "cache": {}, "timings": { "blocked": 1.6390000078938902, "dns": -1, "ssl": -1, "connect": -1, "send": 0.22799999999999998, "wait": 46.798000001456586, "receive": 4.482999996980652, "_blocked_queueing": 0.9260000078938901 }, "serverIPAddress": "[2607:f8b0:4006:805::200e]", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "N", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 95516 }, { "functionName": "B", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 96555 }, { "functionName": "", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 191066 }, { "functionName": "q.D", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 97414 }, { "functionName": "jn.send", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 113367 }, { "functionName": "Ue.e.", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 102266 }, { "functionName": "Yn.v", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 118605 }, { "functionName": "Yn.D", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 118050 }, { "functionName": "zn", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 118660 }, { "functionName": "an", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 11686 }, { "functionName": "Zi", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 189470 }, { "functionName": "", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 191464 } ], "parent": { "description": "async function", "callFrames": [ { "functionName": "", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 191456 }, { "functionName": "execute", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 191469 }, { "functionName": "", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 337 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "register", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 325 }, { "functionName": "", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 620 } ] } } } }, "_priority": "VeryLow", "_resourceType": "other", "connection": "386966", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:43.238Z", "time": 56.18499999400228, "request": { "method": "GET", "url": "https://collector.githubapp.com/github/page_view?dimensions[page]=https%3A%2F%2Fgithub.com%2Fsessions%2Ftwo-factor&dimensions[title]=GitHub%20%C2%B7%20Where%20software%20is%20built&dimensions[referrer]=https%3A%2F%2Fgithub.com%2Flogin%3Fclient_id%3D0246739cfbc9f17c5af6%26return_to%3D%252Flogin%252Foauth%252Fauthorize%253Fclient_id%253D0246739cfbc9f17c5af6%2526redirect_uri%253Dhttps%25253A%25252F%25252Fchronicler-notes.auth0.com%25252Flogin%25252Fcallback%2526response_type%253Dcode%2526scope%253Drepo%2526state%253Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq&dimensions[user_agent]=Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_14_6)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F77.0.3865.120%20Safari%2F537.36&dimensions[screen_resolution]=1440x900&dimensions[pixel_ratio]=2&dimensions[browser_resolution]=689x766&dimensions[tz_seconds]=-14400&dimensions[timestamp]=1571709823237&dimensions[request_id]=DD85%3A7ABB%3A8C2CB%3A12FB25%3A5DAE637E&dimensions[region_edge]=iad&dimensions[region_render]=iad&dimensions[ga_id]=1816580976.1571709818&dimensions[visitor_id]=740246527094449017&&measures[performance_timing]=1-192-192-972-872-865-865-656-192-192-192--972-0-192-4-194-644-641--654-654&&&dimensions[cid]=172352075.1571709817", "httpVersion": "http/1.1", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [ { "name": "dimensions[page]", "value": "https%3A%2F%2Fgithub.com%2Fsessions%2Ftwo-factor" }, { "name": "dimensions[title]", "value": "GitHub%20%C2%B7%20Where%20software%20is%20built" }, { "name": "dimensions[referrer]", "value": "https%3A%2F%2Fgithub.com%2Flogin%3Fclient_id%3D0246739cfbc9f17c5af6%26return_to%3D%252Flogin%252Foauth%252Fauthorize%253Fclient_id%253D0246739cfbc9f17c5af6%2526redirect_uri%253Dhttps%25253A%25252F%25252Fchronicler-notes.auth0.com%25252Flogin%25252Fcallback%2526response_type%253Dcode%2526scope%253Drepo%2526state%253Der3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" }, { "name": "dimensions[user_agent]", "value": "Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_14_6)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F77.0.3865.120%20Safari%2F537.36" }, { "name": "dimensions[screen_resolution]", "value": "1440x900" }, { "name": "dimensions[pixel_ratio]", "value": "2" }, { "name": "dimensions[browser_resolution]", "value": "689x766" }, { "name": "dimensions[tz_seconds]", "value": "-14400" }, { "name": "dimensions[timestamp]", "value": "1571709823237" }, { "name": "dimensions[request_id]", "value": "DD85%3A7ABB%3A8C2CB%3A12FB25%3A5DAE637E" }, { "name": "dimensions[region_edge]", "value": "iad" }, { "name": "dimensions[region_render]", "value": "iad" }, { "name": "dimensions[ga_id]", "value": "1816580976.1571709818" }, { "name": "dimensions[visitor_id]", "value": "740246527094449017" }, { "name": "", "value": "" }, { "name": "measures[performance_timing]", "value": "1-192-192-972-872-865-865-656-192-192-192--972-0-192-4-194-644-641--654-654" }, { "name": "", "value": "" }, { "name": "", "value": "" }, { "name": "dimensions[cid]", "value": "172352075.1571709817" } ], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:43 GMT" }, { "name": "Last-Modified", "value": "Tue, 22 Oct 2019 02:03:43 GMT" }, { "name": "Server", "value": "GitHub.com" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000" }, { "name": "Content-Type", "value": "image/gif; charset=utf-8" }, { "name": "X-Request-Id", "value": "a02a19f06cf620a3361f9e420f272ea5" }, { "name": "Cache-Control", "value": "no-store, no-cache, must-revalidate, private" }, { "name": "X-UA-Compatible", "value": "IE=Edge,chrome=1" }, { "name": "Connection", "value": "keep-alive" }, { "name": "X-Runtime", "value": "0.003804" }, { "name": "Content-Length", "value": "35" }, { "name": "X-Rack-Cache", "value": "miss" }, { "name": "Expires", "value": "Sat, 25 Nov 2000 05:00:00 GMT" } ], "cookies": [], "content": { "size": 35, "mimeType": "image/gif", "text": "R0lGODlhAQABAID/AP///wAAACwAAAAAAQABAAACAkQBADs=", "encoding": "base64" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 529 }, "cache": {}, "timings": { "blocked": 1.180000001123175, "dns": -1, "ssl": -1, "connect": -1, "send": 0.21999999999999997, "wait": 52.28099998919666, "receive": 2.5040000036824495, "_blocked_queueing": 0.906000001123175 }, "serverIPAddress": "52.71.145.185", "_initiator": { "type": "script", "stack": { "callFrames": [], "parent": { "description": "Image", "callFrames": [ { "functionName": "recordPageView", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 147731 }, { "functionName": "applyCall", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 152900 }, { "functionName": "push", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 148449 }, { "functionName": "", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 254508 } ], "parent": { "description": "async function", "callFrames": [ { "functionName": "", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 254446 }, { "functionName": "execute", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 254533 }, { "functionName": "", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 337 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "register", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 325 }, { "functionName": "", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 620 } ] } } } } }, "_priority": "Low", "_resourceType": "image", "connection": "386981", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:43.267Z", "time": 44.0050000033807, "request": { "method": "POST", "url": "https://api.github.com/_private/browser/stats", "httpVersion": "http/1.1", "headers": [ { "name": "Sec-Fetch-Mode", "value": "no-cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" }, { "name": "Content-Type", "value": "text/plain;charset=UTF-8" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 1191, "postData": { "mimeType": "text/plain;charset=UTF-8", "text": "{\"stats\":[{\"resourceTimings\":[{\"name\":\"https://github.githubassets.com/assets/frameworks-2fd1891c9e6292401a1a3de8bc3f747f.css\",\"entryType\":\"resource\",\"startTime\":661.805000010645,\"duration\":26.074999972479418},{\"name\":\"https://github.githubassets.com/assets/site-09367dd1ae1784b858e71c8471ca0949.css\",\"entryType\":\"resource\",\"startTime\":661.9950000022072,\"duration\":25.584999995771796},{\"name\":\"https://github.githubassets.com/assets/github-211e7a5168e3492fd5f3d4312f92593c.css\",\"entryType\":\"resource\",\"startTime\":662.1499999891967,\"duration\":34.205000003566965},{\"name\":\"https://github.githubassets.com/images/spinners/octocat-spinner-32.gif\",\"entryType\":\"resource\",\"startTime\":662.3050000052899,\"duration\":55.72000000393018},{\"name\":\"https://github.githubassets.com/assets/frameworks-e9d484b7.js\",\"entryType\":\"resource\",\"startTime\":662.4599999922793,\"duration\":64.29500001831912},{\"name\":\"https://github.githubassets.com/assets/github-bootstrap-276b2659.js\",\"entryType\":\"resource\",\"startTime\":662.6199999882374,\"duration\":65.12499999371357}],\"timestamp\":1571709823253},{\"navigationTimings\":[{\"entryType\":\"navigation\",\"startTime\":0,\"duration\":984.9600000015926}],\"timestamp\":1571709823253}]}" } }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:43 GMT" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "X-GitHub-Media-Type", "value": "github.v3; format=json" }, { "name": "Status", "value": "200 OK" }, { "name": "X-RateLimit-Remaining", "value": "60" }, { "name": "Content-Length", "value": "5" }, { "name": "X-XSS-Protection", "value": "1; mode=block" }, { "name": "Referrer-Policy", "value": "origin-when-cross-origin, strict-origin-when-cross-origin" }, { "name": "Server", "value": "GitHub.com" }, { "name": "X-GitHub-Request-Id", "value": "DD93:482B:9DFB9:1908B5:5DAE637A" }, { "name": "X-Frame-Options", "value": "deny" }, { "name": "Content-Security-Policy", "value": "default-src 'none'" }, { "name": "Strict-Transport-Security", "value": "max-age=31536000; includeSubdomains; preload" }, { "name": "Content-Type", "value": "application/json; charset=utf-8" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Access-Control-Expose-Headers", "value": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "X-RateLimit-Reset", "value": "1571713418" }, { "name": "X-RateLimit-Limit", "value": "60" } ], "cookies": [], "content": { "size": 5, "mimeType": "application/json" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 903 }, "cache": {}, "timings": { "blocked": 2.911000002505258, "dns": -1, "ssl": -1, "connect": -1, "send": 0.14200000000000002, "wait": 40.494000005897135, "receive": 0.4579999949783087, "_blocked_queueing": 2.5650000025052577 }, "serverIPAddress": "192.30.253.116", "_initiator": { "type": "script", "stack": { "callFrames": [ { "functionName": "ce", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 37754 } ], "parent": { "description": "requestIdleCallback", "callFrames": [ { "functionName": "", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 37548 } ], "parent": { "description": "async function", "callFrames": [ { "functionName": "", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 37518 }, { "functionName": "se", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 37573 }, { "functionName": "", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 17, "columnNumber": 19066 } ], "parent": { "description": "async function", "callFrames": [ { "functionName": "", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 17, "columnNumber": 18650 }, { "functionName": "execute", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 17, "columnNumber": 20281 }, { "functionName": "", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 337 } ], "parent": { "description": "Promise.then", "callFrames": [ { "functionName": "register", "scriptId": "16", "url": "https://github.githubassets.com/assets/frameworks-e9d484b7.js", "lineNumber": 0, "columnNumber": 325 }, { "functionName": "", "scriptId": "15", "url": "https://github.githubassets.com/assets/github-bootstrap-276b2659.js", "lineNumber": 0, "columnNumber": 620 } ] } } } } } }, "_priority": "VeryLow", "_resourceType": "other", "connection": "386990", "pageref": "page_4" }, { "startedDateTime": "2019-10-22T02:03:59.635Z", "time": 29.7300000092946, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/redirect-2611abfa.js", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "7cd49b7c54cc96e54e4bbacc4f084cf86730eef0" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:59 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "2933" }, { "name": "x-cache", "value": "HIT, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "184" }, { "name": "x-served-by", "value": "cache-iad2127-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Tue, 22 Oct 2019 01:12:47 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709840.647312,VS0,VE0" }, { "name": "etag", "value": "\"815a38d88638cdf22d1082f794888be5\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "application/javascript" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "3, 1" } ], "cookies": [], "content": { "size": 191, "mimeType": "application/javascript" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 477 }, "cache": {}, "timings": { "blocked": 8.6550000012964, "dns": -1, "ssl": -1, "connect": -1, "send": 0.45100000000000007, "wait": 20.177999987978488, "receive": 0.44600002001971006, "_blocked_queueing": 8.042000001296401 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/login/oauth/authorize?client_id=0246739cfbc9f17c5af6&redirect_uri=https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback&response_type=code&scope=repo&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "lineNumber": 17 }, "_priority": "High", "_resourceType": "script", "connection": "386928", "pageref": "page_5" }, { "startedDateTime": "2019-10-22T02:03:59.635Z", "time": 29.84999999171123, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/frameworks-2fd1891c9e6292401a1a3de8bc3f747f.css", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "41daebdc31ece6ca4e333c6d8d72c7876b08271f" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:59 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "278158" }, { "name": "x-cache", "value": "HIT, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "24724" }, { "name": "x-served-by", "value": "cache-iad2142-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Fri, 18 Oct 2019 20:45:50 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709840.647336,VS0,VE0" }, { "name": "etag", "value": "\"f8747f35f828c0dac9f4b38f99c6b648\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "text/css" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "2, 14264" } ], "cookies": [], "content": { "size": 144869, "mimeType": "text/css" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 25018 }, "cache": {}, "timings": { "blocked": 8.576999999942258, "dns": -1, "ssl": -1, "connect": -1, "send": 0.31899999999999995, "wait": 18.91399999964796, "receive": 2.039999992121011, "_blocked_queueing": 8.037999999942258 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/login/oauth/authorize?client_id=0246739cfbc9f17c5af6&redirect_uri=https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback&response_type=code&scope=repo&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "lineNumber": 18 }, "_priority": "VeryHigh", "_resourceType": "stylesheet", "connection": "386928", "pageref": "page_5" }, { "startedDateTime": "2019-10-22T02:03:59.635Z", "time": 54.44700000225566, "request": { "method": "GET", "url": "https://github.githubassets.com/assets/github-211e7a5168e3492fd5f3d4312f92593c.css", "httpVersion": "http/2.0", "headers": [ { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Referer", "value": "https://github.com/" }, { "name": "Origin", "value": "https://github.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "", "httpVersion": "http/2.0", "headers": [ { "name": "x-fastly-request-id", "value": "833d84e6015b3d4ba8ea69abf5f2e5c58e174d7e" }, { "name": "date", "value": "Tue, 22 Oct 2019 02:03:59 GMT" }, { "name": "content-encoding", "value": "gzip" }, { "name": "vary", "value": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Accept-Encoding" }, { "name": "age", "value": "7900" }, { "name": "x-cache", "value": "HIT, HIT" }, { "name": "status", "value": "200" }, { "name": "content-length", "value": "75291" }, { "name": "x-served-by", "value": "cache-iad2129-IAD, cache-lga21924-LGA" }, { "name": "access-control-allow-origin", "value": "*" }, { "name": "last-modified", "value": "Mon, 21 Oct 2019 23:50:14 GMT" }, { "name": "server", "value": "AmazonS3" }, { "name": "x-timer", "value": "S1571709840.662133,VS0,VE0" }, { "name": "etag", "value": "\"c0a45402116453cc87f54a820a52aad9\"" }, { "name": "access-control-max-age", "value": "3600" }, { "name": "access-control-allow-methods", "value": "GET" }, { "name": "content-type", "value": "text/css" }, { "name": "via", "value": "1.1 varnish, 1.1 varnish" }, { "name": "cache-control", "value": "public, max-age=31536000" }, { "name": "accept-ranges", "value": "bytes" }, { "name": "x-cache-hits", "value": "1, 781" } ], "cookies": [], "content": { "size": 397812, "mimeType": "text/css" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 75532 }, "cache": {}, "timings": { "blocked": 8.69700001044199, "dns": -1, "ssl": -1, "connect": -1, "send": 0.10499999999999998, "wait": 33.81400001020171, "receive": 11.830999981611967, "_blocked_queueing": 8.112000010441989 }, "serverIPAddress": "185.199.110.154", "_initiator": { "type": "parser", "url": "https://github.com/login/oauth/authorize?client_id=0246739cfbc9f17c5af6&redirect_uri=https%3A%2F%2Fchronicler-notes.auth0.com%2Flogin%2Fcallback&response_type=code&scope=repo&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "lineNumber": 19 }, "_priority": "VeryHigh", "_resourceType": "stylesheet", "connection": "386928", "pageref": "page_5" }, { "startedDateTime": "2019-10-22T02:03:59.823Z", "time": 13.561999978264794, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/socket.io/socket.io.js", "httpVersion": "http/1.1", "headers": [ { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/callback?error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.&error_uri=https%3A%2F%2Fdeveloper.github.com%2Fapps%2Fmanaging-oauth-apps%2Ftroubleshooting-authorization-request-errors%2F%23redirect-uri-mismatch&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:59 GMT" }, { "name": "Cache-Control", "value": "public, max-age=0" }, { "name": "Connection", "value": "keep-alive" }, { "name": "ETag", "value": "\"2.3.0\"" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Content-Type", "value": "application/javascript" } ], "cookies": [], "content": { "size": 68686, "mimeType": "application/javascript", "text": "/*!\n * Socket.IO v2.3.0\n * (c) 2014-2019 Guillermo Rauch\n * Released under the MIT License.\n */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.io=e():t.io=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p=\"\",e(0)}([function(t,e,n){function r(t,e){\"object\"==typeof t&&(e=t,t=void 0),e=e||{};var n,r=o(t),i=r.source,u=r.id,p=r.path,h=c[u]&&p in c[u].nsps,f=e.forceNew||e[\"force new connection\"]||!1===e.multiplex||h;return f?(a(\"ignoring socket cache for %s\",i),n=s(i,e)):(c[u]||(a(\"new io instance for %s\",i),c[u]=s(i,e)),n=c[u]),r.query&&!e.query&&(e.query=r.query),n.socket(r.path,e)}var o=n(1),i=n(7),s=n(15),a=n(3)(\"socket.io-client\");t.exports=e=r;var c=e.managers={};e.protocol=i.protocol,e.connect=r,e.Manager=n(15),e.Socket=n(39)},function(t,e,n){function r(t,e){var n=t;e=e||\"undefined\"!=typeof location&&location,null==t&&(t=e.protocol+\"//\"+e.host),\"string\"==typeof t&&(\"/\"===t.charAt(0)&&(t=\"/\"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\\/\\//.test(t)||(i(\"protocol-less url %s\",t),t=\"undefined\"!=typeof e?e.protocol+\"//\"+t:\"https://\"+t),i(\"parse %s\",t),n=o(t)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port=\"80\":/^(http|ws)s$/.test(n.protocol)&&(n.port=\"443\")),n.path=n.path||\"/\";var r=n.host.indexOf(\":\")!==-1,s=r?\"[\"+n.host+\"]\":n.host;return n.id=n.protocol+\"://\"+s+\":\"+n.port,n.href=n.protocol+\"://\"+s+(e&&e.port===n.port?\"\":\":\"+n.port),n}var o=n(2),i=n(3)(\"socket.io-client:url\");t.exports=r},function(t,e){var n=/^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/,r=[\"source\",\"protocol\",\"authority\",\"userInfo\",\"user\",\"password\",\"host\",\"port\",\"relative\",\"path\",\"directory\",\"file\",\"query\",\"anchor\"];t.exports=function(t){var e=t,o=t.indexOf(\"[\"),i=t.indexOf(\"]\");o!=-1&&i!=-1&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,\";\")+t.substring(i,t.length));for(var s=n.exec(t||\"\"),a={},c=14;c--;)a[r[c]]=s[c]||\"\";return o!=-1&&i!=-1&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,\":\"),a.authority=a.authority.replace(\"[\",\"\").replace(\"]\",\"\").replace(/;/g,\":\"),a.ipv6uri=!0),a}},function(t,e,n){(function(r){\"use strict\";function o(){return!(\"undefined\"==typeof window||!window.process||\"renderer\"!==window.process.type&&!window.process.__nwjs)||(\"undefined\"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/))&&(\"undefined\"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||\"undefined\"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))}function i(e){if(e[0]=(this.useColors?\"%c\":\"\")+this.namespace+(this.useColors?\" %c\":\" \")+e[0]+(this.useColors?\"%c \":\" \")+\"+\"+t.exports.humanize(this.diff),this.useColors){var n=\"color: \"+this.color;e.splice(1,0,n,\"color: inherit\");var r=0,o=0;e[0].replace(/%[a-zA-Z%]/g,function(t){\"%%\"!==t&&(r++,\"%c\"===t&&(o=r))}),e.splice(o,0,n)}}function s(){var t;return\"object\"===(\"undefined\"==typeof console?\"undefined\":p(console))&&console.log&&(t=console).log.apply(t,arguments)}function a(t){try{t?e.storage.setItem(\"debug\",t):e.storage.removeItem(\"debug\")}catch(n){}}function c(){var t=void 0;try{t=e.storage.getItem(\"debug\")}catch(n){}return!t&&\"undefined\"!=typeof r&&\"env\"in r&&(t=r.env.DEBUG),t}function u(){try{return localStorage}catch(t){}}var p=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t};e.log=s,e.formatArgs=i,e.save=a,e.load=c,e.useColors=o,e.storage=u(),e.colors=[\"#0000CC\",\"#0000FF\",\"#0033CC\",\"#0033FF\",\"#0066CC\",\"#0066FF\",\"#0099CC\",\"#0099FF\",\"#00CC00\",\"#00CC33\",\"#00CC66\",\"#00CC99\",\"#00CCCC\",\"#00CCFF\",\"#3300CC\",\"#3300FF\",\"#3333CC\",\"#3333FF\",\"#3366CC\",\"#3366FF\",\"#3399CC\",\"#3399FF\",\"#33CC00\",\"#33CC33\",\"#33CC66\",\"#33CC99\",\"#33CCCC\",\"#33CCFF\",\"#6600CC\",\"#6600FF\",\"#6633CC\",\"#6633FF\",\"#66CC00\",\"#66CC33\",\"#9900CC\",\"#9900FF\",\"#9933CC\",\"#9933FF\",\"#99CC00\",\"#99CC33\",\"#CC0000\",\"#CC0033\",\"#CC0066\",\"#CC0099\",\"#CC00CC\",\"#CC00FF\",\"#CC3300\",\"#CC3333\",\"#CC3366\",\"#CC3399\",\"#CC33CC\",\"#CC33FF\",\"#CC6600\",\"#CC6633\",\"#CC9900\",\"#CC9933\",\"#CCCC00\",\"#CCCC33\",\"#FF0000\",\"#FF0033\",\"#FF0066\",\"#FF0099\",\"#FF00CC\",\"#FF00FF\",\"#FF3300\",\"#FF3333\",\"#FF3366\",\"#FF3399\",\"#FF33CC\",\"#FF33FF\",\"#FF6600\",\"#FF6633\",\"#FF9900\",\"#FF9933\",\"#FFCC00\",\"#FFCC33\"],t.exports=n(5)(e);var h=t.exports.formatters;h.j=function(t){try{return JSON.stringify(t)}catch(e){return\"[UnexpectedJSONParseError]: \"+e.message}}}).call(e,n(4))},function(t,e){function n(){throw new Error(\"setTimeout has not been defined\")}function r(){throw new Error(\"clearTimeout has not been defined\")}function o(t){if(p===setTimeout)return setTimeout(t,0);if((p===n||!p)&&setTimeout)return p=setTimeout,setTimeout(t,0);try{return p(t,0)}catch(e){try{return p.call(null,t,0)}catch(e){return p.call(this,t,0)}}}function i(t){if(h===clearTimeout)return clearTimeout(t);if((h===r||!h)&&clearTimeout)return h=clearTimeout,clearTimeout(t);try{return h(t)}catch(e){try{return h.call(null,t)}catch(e){return h.call(this,t)}}}function s(){y&&l&&(y=!1,l.length?d=l.concat(d):m=-1,d.length&&a())}function a(){if(!y){var t=o(s);y=!0;for(var e=d.length;e;){for(l=d,d=[];++m1)for(var n=1;n100)){var e=/^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||\"ms\").toLowerCase();switch(r){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return n*h;case\"weeks\":case\"week\":case\"w\":return n*p;case\"days\":case\"day\":case\"d\":return n*u;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return n*c;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return n*a;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return n*s;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return n;default:return}}}}function r(t){var e=Math.abs(t);return e>=u?Math.round(t/u)+\"d\":e>=c?Math.round(t/c)+\"h\":e>=a?Math.round(t/a)+\"m\":e>=s?Math.round(t/s)+\"s\":t+\"ms\"}function o(t){var e=Math.abs(t);return e>=u?i(t,e,u,\"day\"):e>=c?i(t,e,c,\"hour\"):e>=a?i(t,e,a,\"minute\"):e>=s?i(t,e,s,\"second\"):t+\" ms\"}function i(t,e,n,r){var o=e>=1.5*n;return Math.round(t/n)+\" \"+r+(o?\"s\":\"\")}var s=1e3,a=60*s,c=60*a,u=24*c,p=7*u,h=365.25*u;t.exports=function(t,e){e=e||{};var i=typeof t;if(\"string\"===i&&t.length>0)return n(t);if(\"number\"===i&&isFinite(t))return e[\"long\"]?o(t):r(t);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(t))}},function(t,e,n){function r(){}function o(t){var n=\"\"+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(n+=t.attachments+\"-\"),t.nsp&&\"/\"!==t.nsp&&(n+=t.nsp+\",\"),null!=t.id&&(n+=t.id),null!=t.data){var r=i(t.data);if(r===!1)return g;n+=r}return f(\"encoded %j as %s\",t,n),n}function i(t){try{return JSON.stringify(t)}catch(e){return!1}}function s(t,e){function n(t){var n=d.deconstructPacket(t),r=o(n.packet),i=n.buffers;i.unshift(r),e(i)}d.removeBlobs(t,n)}function a(){this.reconstructor=null}function c(t){var n=0,r={type:Number(t.charAt(0))};if(null==e.types[r.type])return h(\"unknown packet type \"+r.type);if(e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type){for(var o=\"\";\"-\"!==t.charAt(++n)&&(o+=t.charAt(n),n!=t.length););if(o!=Number(o)||\"-\"!==t.charAt(n))throw new Error(\"Illegal attachments\");r.attachments=Number(o)}if(\"/\"===t.charAt(n+1))for(r.nsp=\"\";++n;){var i=t.charAt(n);if(\",\"===i)break;if(r.nsp+=i,n===t.length)break}else r.nsp=\"/\";var s=t.charAt(n+1);if(\"\"!==s&&Number(s)==s){for(r.id=\"\";++n;){var i=t.charAt(n);if(null==i||Number(i)!=i){--n;break}if(r.id+=t.charAt(n),n===t.length)break}r.id=Number(r.id)}if(t.charAt(++n)){var a=u(t.substr(n)),c=a!==!1&&(r.type===e.ERROR||y(a));if(!c)return h(\"invalid payload\");r.data=a}return f(\"decoded %s as %j\",t,r),r}function u(t){try{return JSON.parse(t)}catch(e){return!1}}function p(t){this.reconPack=t,this.buffers=[]}function h(t){return{type:e.ERROR,data:\"parser error: \"+t}}var f=n(8)(\"socket.io-parser\"),l=n(11),d=n(12),y=n(13),m=n(14);e.protocol=4,e.types=[\"CONNECT\",\"DISCONNECT\",\"EVENT\",\"ACK\",\"ERROR\",\"BINARY_EVENT\",\"BINARY_ACK\"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=r,e.Decoder=a;var g=e.ERROR+'\"encode error\"';r.prototype.encode=function(t,n){if(f(\"encoding packet %j\",t),e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,n);else{var r=o(t);n([r])}},l(a.prototype),a.prototype.add=function(t){var n;if(\"string\"==typeof t)n=c(t),e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type?(this.reconstructor=new p(n),0===this.reconstructor.reconPack.attachments&&this.emit(\"decoded\",n)):this.emit(\"decoded\",n);else{if(!m(t)&&!t.base64)throw new Error(\"Unknown type: \"+t);if(!this.reconstructor)throw new Error(\"got binary data when not reconstructing a packet\");n=this.reconstructor.takeBinaryData(t),n&&(this.reconstructor=null,this.emit(\"decoded\",n))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},p.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=d.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},p.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,n){(function(r){\"use strict\";function o(){return!(\"undefined\"==typeof window||!window.process||\"renderer\"!==window.process.type)||(\"undefined\"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/))&&(\"undefined\"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||\"undefined\"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))}function i(t){var n=this.useColors;if(t[0]=(n?\"%c\":\"\")+this.namespace+(n?\" %c\":\" \")+t[0]+(n?\"%c \":\" \")+\"+\"+e.humanize(this.diff),n){var r=\"color: \"+this.color;t.splice(1,0,r,\"color: inherit\");var o=0,i=0;t[0].replace(/%[a-zA-Z%]/g,function(t){\"%%\"!==t&&(o++,\"%c\"===t&&(i=o))}),t.splice(i,0,r)}}function s(){return\"object\"===(\"undefined\"==typeof console?\"undefined\":p(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(t){try{null==t?e.storage.removeItem(\"debug\"):e.storage.debug=t}catch(n){}}function c(){var t;try{t=e.storage.debug}catch(n){}return!t&&\"undefined\"!=typeof r&&\"env\"in r&&(t=r.env.DEBUG),t}function u(){try{return window.localStorage}catch(t){}}var p=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t};e=t.exports=n(9),e.log=s,e.formatArgs=i,e.save=a,e.load=c,e.useColors=o,e.storage=\"undefined\"!=typeof chrome&&\"undefined\"!=typeof chrome.storage?chrome.storage.local:u(),e.colors=[\"#0000CC\",\"#0000FF\",\"#0033CC\",\"#0033FF\",\"#0066CC\",\"#0066FF\",\"#0099CC\",\"#0099FF\",\"#00CC00\",\"#00CC33\",\"#00CC66\",\"#00CC99\",\"#00CCCC\",\"#00CCFF\",\"#3300CC\",\"#3300FF\",\"#3333CC\",\"#3333FF\",\"#3366CC\",\"#3366FF\",\"#3399CC\",\"#3399FF\",\"#33CC00\",\"#33CC33\",\"#33CC66\",\"#33CC99\",\"#33CCCC\",\"#33CCFF\",\"#6600CC\",\"#6600FF\",\"#6633CC\",\"#6633FF\",\"#66CC00\",\"#66CC33\",\"#9900CC\",\"#9900FF\",\"#9933CC\",\"#9933FF\",\"#99CC00\",\"#99CC33\",\"#CC0000\",\"#CC0033\",\"#CC0066\",\"#CC0099\",\"#CC00CC\",\"#CC00FF\",\"#CC3300\",\"#CC3333\",\"#CC3366\",\"#CC3399\",\"#CC33CC\",\"#CC33FF\",\"#CC6600\",\"#CC6633\",\"#CC9900\",\"#CC9933\",\"#CCCC00\",\"#CCCC33\",\"#FF0000\",\"#FF0033\",\"#FF0066\",\"#FF0099\",\"#FF00CC\",\"#FF00FF\",\"#FF3300\",\"#FF3333\",\"#FF3366\",\"#FF3399\",\"#FF33CC\",\"#FF33FF\",\"#FF6600\",\"#FF6633\",\"#FF9900\",\"#FF9933\",\"#FFCC00\",\"#FFCC33\"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(e){return\"[UnexpectedJSONParseError]: \"+e.message}},e.enable(c())}).call(e,n(4))},function(t,e,n){\"use strict\";function r(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}function o(t){function n(){if(n.enabled){var t=n,r=+new Date,i=r-(o||r);t.diff=i,t.prev=o,t.curr=r,o=r;for(var s=new Array(arguments.length),a=0;a100)){var e=/^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||\"ms\").toLowerCase();switch(r){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return n*p;case\"days\":case\"day\":case\"d\":return n*u;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return n*c;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return n*a;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return n*s;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return n;default:return}}}}function r(t){return t>=u?Math.round(t/u)+\"d\":t>=c?Math.round(t/c)+\"h\":t>=a?Math.round(t/a)+\"m\":t>=s?Math.round(t/s)+\"s\":t+\"ms\"}function o(t){return i(t,u,\"day\")||i(t,c,\"hour\")||i(t,a,\"minute\")||i(t,s,\"second\")||t+\" ms\"}function i(t,e,n){if(!(t0)return n(t);if(\"number\"===i&&isNaN(t)===!1)return e[\"long\"]?o(t):r(t);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(t))}},function(t,e,n){function r(t){if(t)return o(t)}function o(t){for(var e in r.prototype)t[e]=r.prototype[e];return t}t.exports=r,r.prototype.on=r.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},r.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var r,o=0;o0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},r.prototype.cleanup=function(){p(\"cleanup\");for(var t=this.subs.length,e=0;e=this._reconnectionAttempts)p(\"reconnect failed\"),this.backoff.reset(),this.emitAll(\"reconnect_failed\"),this.reconnecting=!1;else{var e=this.backoff.duration();p(\"will wait %dms before reconnect attempt\",e),this.reconnecting=!0;var n=setTimeout(function(){t.skipReconnect||(p(\"attempting reconnect\"),t.emitAll(\"reconnect_attempt\",t.backoff.attempts),t.emitAll(\"reconnecting\",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(p(\"reconnect attempt error\"),t.reconnecting=!1,t.reconnect(),t.emitAll(\"reconnect_error\",e.data)):(p(\"reconnect success\"),t.onreconnect())}))},e);this.subs.push({destroy:function(){clearTimeout(n)}})}},r.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll(\"reconnect\",t)}},function(t,e,n){t.exports=n(17),t.exports.parser=n(24)},function(t,e,n){function r(t,e){return this instanceof r?(e=e||{},t&&\"object\"==typeof t&&(e=t,t=null),t?(t=p(t),e.hostname=t.host,e.secure=\"https\"===t.protocol||\"wss\"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=p(e.host).host),this.secure=null!=e.secure?e.secure:\"undefined\"!=typeof location&&\"https:\"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?\"443\":\"80\"),this.agent=e.agent||!1,this.hostname=e.hostname||(\"undefined\"!=typeof location?location.hostname:\"localhost\"),this.port=e.port||(\"undefined\"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},\"string\"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||\"/engine.io\").replace(/\\/$/,\"\")+\"/\",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||\"t\",this.timestampRequests=e.timestampRequests,this.transports=e.transports||[\"polling\",\"websocket\"],this.transportOptions=e.transportOptions||{},this.readyState=\"\",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative=\"undefined\"!=typeof navigator&&\"string\"==typeof navigator.product&&\"reactnative\"===navigator.product.toLowerCase(),(\"undefined\"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new r(t,e)}function o(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}var i=n(18),s=n(11),a=n(3)(\"engine.io-client:socket\"),c=n(38),u=n(24),p=n(2),h=n(32);t.exports=r,r.priorWebsocketSuccess=!1,s(r.prototype),r.protocol=u.protocol,r.Socket=r,r.Transport=n(23),r.transports=n(18),r.parser=n(24),r.prototype.createTransport=function(t){a('creating transport \"%s\"',t);var e=o(this.query);e.EIO=u.protocol,e.transport=t;var n=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var r=new i[t]({query:e,socket:this,agent:n.agent||this.agent,hostname:n.hostname||this.hostname,port:n.port||this.port,secure:n.secure||this.secure,path:n.path||this.path,forceJSONP:n.forceJSONP||this.forceJSONP,jsonp:n.jsonp||this.jsonp,forceBase64:n.forceBase64||this.forceBase64,enablesXDR:n.enablesXDR||this.enablesXDR,withCredentials:n.withCredentials||this.withCredentials,timestampRequests:n.timestampRequests||this.timestampRequests,timestampParam:n.timestampParam||this.timestampParam,policyPort:n.policyPort||this.policyPort,pfx:n.pfx||this.pfx,key:n.key||this.key,passphrase:n.passphrase||this.passphrase,cert:n.cert||this.cert,ca:n.ca||this.ca,ciphers:n.ciphers||this.ciphers,rejectUnauthorized:n.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:n.perMessageDeflate||this.perMessageDeflate,extraHeaders:n.extraHeaders||this.extraHeaders,forceNode:n.forceNode||this.forceNode,localAddress:n.localAddress||this.localAddress,requestTimeout:n.requestTimeout||this.requestTimeout,protocols:n.protocols||void 0,isReactNative:this.isReactNative});return r},r.prototype.open=function(){var t;if(this.rememberUpgrade&&r.priorWebsocketSuccess&&this.transports.indexOf(\"websocket\")!==-1)t=\"websocket\";else{\nif(0===this.transports.length){var e=this;return void setTimeout(function(){e.emit(\"error\",\"No transports available\")},0)}t=this.transports[0]}this.readyState=\"opening\";try{t=this.createTransport(t)}catch(n){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},r.prototype.setTransport=function(t){a(\"setting transport %s\",t.name);var e=this;this.transport&&(a(\"clearing existing transport %s\",this.transport.name),this.transport.removeAllListeners()),this.transport=t,t.on(\"drain\",function(){e.onDrain()}).on(\"packet\",function(t){e.onPacket(t)}).on(\"error\",function(t){e.onError(t)}).on(\"close\",function(){e.onClose(\"transport close\")})},r.prototype.probe=function(t){function e(){if(f.onlyBinaryUpgrades){var e=!this.supportsBinary&&f.transport.supportsBinary;h=h||e}h||(a('probe transport \"%s\" opened',t),p.send([{type:\"ping\",data:\"probe\"}]),p.once(\"packet\",function(e){if(!h)if(\"pong\"===e.type&&\"probe\"===e.data){if(a('probe transport \"%s\" pong',t),f.upgrading=!0,f.emit(\"upgrading\",p),!p)return;r.priorWebsocketSuccess=\"websocket\"===p.name,a('pausing current transport \"%s\"',f.transport.name),f.transport.pause(function(){h||\"closed\"!==f.readyState&&(a(\"changing transport and sending upgrade packet\"),u(),f.setTransport(p),p.send([{type:\"upgrade\"}]),f.emit(\"upgrade\",p),p=null,f.upgrading=!1,f.flush())})}else{a('probe transport \"%s\" failed',t);var n=new Error(\"probe error\");n.transport=p.name,f.emit(\"upgradeError\",n)}}))}function n(){h||(h=!0,u(),p.close(),p=null)}function o(e){var r=new Error(\"probe error: \"+e);r.transport=p.name,n(),a('probe transport \"%s\" failed because of error: %s',t,e),f.emit(\"upgradeError\",r)}function i(){o(\"transport closed\")}function s(){o(\"socket closed\")}function c(t){p&&t.name!==p.name&&(a('\"%s\" works - aborting \"%s\"',t.name,p.name),n())}function u(){p.removeListener(\"open\",e),p.removeListener(\"error\",o),p.removeListener(\"close\",i),f.removeListener(\"close\",s),f.removeListener(\"upgrading\",c)}a('probing transport \"%s\"',t);var p=this.createTransport(t,{probe:1}),h=!1,f=this;r.priorWebsocketSuccess=!1,p.once(\"open\",e),p.once(\"error\",o),p.once(\"close\",i),this.once(\"close\",s),this.once(\"upgrading\",c),p.open()},r.prototype.onOpen=function(){if(a(\"socket open\"),this.readyState=\"open\",r.priorWebsocketSuccess=\"websocket\"===this.transport.name,this.emit(\"open\"),this.flush(),\"open\"===this.readyState&&this.upgrade&&this.transport.pause){a(\"starting upgrade probes\");for(var t=0,e=this.upgrades.length;t1?{type:b[o],data:t.substring(1)}:{type:b[o]}:C}var i=new Uint8Array(t),o=i[0],s=f(t,1);return w&&\"blob\"===n&&(s=new w([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var n=b[t.charAt(0)];if(!u)return{type:n,data:{base64:!0,data:t.substr(1)}};var r=u.decode(t.substr(1));return\"blob\"===e&&w&&(r=new w([r])),{type:n,data:r}},e.encodePayload=function(t,n,r){function o(t){return t.length+\":\"+t}function i(t,r){e.encodePacket(t,!!s&&n,!1,function(t){r(null,o(t))})}\"function\"==typeof n&&(r=n,n=null);var s=h(t);return n&&s?w&&!g?e.encodePayloadAsBlob(t,r):e.encodePayloadAsArrayBuffer(t,r):t.length?void c(t,i,function(t,e){return r(e.join(\"\"))}):r(\"0:\")},e.decodePayload=function(t,n,r){if(\"string\"!=typeof t)return e.decodePayloadAsBinary(t,n,r);\"function\"==typeof n&&(r=n,n=null);var o;if(\"\"===t)return r(C,0,1);for(var i,s,a=\"\",c=0,u=t.length;c0;){for(var s=new Uint8Array(o),a=0===s[0],c=\"\",u=1;255!==s[u];u++){if(c.length>310)return r(C,0,1);c+=s[u]}o=f(o,2+c.length),c=parseInt(c);var p=f(o,0,c);if(a)try{p=String.fromCharCode.apply(null,new Uint8Array(p))}catch(h){var l=new Uint8Array(p);p=\"\";for(var u=0;ur&&(n=r),e>=r||e>=n||0===r)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(n-e),s=e,a=0;s=55296&&e<=56319&&o65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error(\"Lone surrogate U+\"+t.toString(16).toUpperCase()+\" is not a scalar value\");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var n=\"\";return 0==(4294965248&t)?n=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),n=d(t>>12&15|224),n+=i(t,6)):0==(4292870144&t)&&(n=d(t>>18&7|240),n+=i(t,12),n+=i(t,6)),n+=d(63&t|128)}function a(t,e){e=e||{};for(var r,o=!1!==e.strict,i=n(t),a=i.length,c=-1,u=\"\";++c=f)throw Error(\"Invalid byte index\");var t=255&h[l];if(l++,128==(192&t))return 63&t;throw Error(\"Invalid continuation byte\")}function u(t){var e,n,r,i,s;if(l>f)throw Error(\"Invalid byte index\");if(l==f)return!1;if(e=255&h[l],l++,0==(128&e))return e;if(192==(224&e)){if(n=c(),s=(31&e)<<6|n,s>=128)return s;throw Error(\"Invalid continuation byte\")}if(224==(240&e)){if(n=c(),r=c(),s=(15&e)<<12|n<<6|r,s>=2048)return o(s,t)?s:65533;throw Error(\"Invalid continuation byte\")}if(240==(248&e)&&(n=c(),r=c(),i=c(),s=(7&e)<<18|n<<12|r<<6|i,s>=65536&&s<=1114111))return s;throw Error(\"Invalid UTF-8 detected\")}function p(t,e){e=e||{};var o=!1!==e.strict;h=n(t),f=h.length,l=0;for(var i,s=[];(i=u(o))!==!1;)s.push(i);return r(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */\nvar h,f,l,d=String.fromCharCode;t.exports={version:\"2.1.2\",encode:a,decode:p}},function(t,e){!function(){\"use strict\";for(var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",n=new Uint8Array(256),r=0;r>2],i+=t[(3&r[n])<<4|r[n+1]>>4],i+=t[(15&r[n+1])<<2|r[n+2]>>6],i+=t[63&r[n+2]];return o%3===2?i=i.substring(0,i.length-1)+\"=\":o%3===1&&(i=i.substring(0,i.length-2)+\"==\"),i},e.decode=function(t){var e,r,o,i,s,a=.75*t.length,c=t.length,u=0;\"=\"===t[t.length-1]&&(a--,\"=\"===t[t.length-2]&&a--);var p=new ArrayBuffer(a),h=new Uint8Array(p);for(e=0;e>4,h[u++]=(15&o)<<4|i>>2,h[u++]=(3&i)<<6|63&s;return p}}()},function(t,e){function n(t){return t.map(function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var n=new Uint8Array(t.byteLength);n.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=n.buffer}return e}return t})}function r(t,e){e=e||{};var r=new i;return n(t).forEach(function(t){r.append(t)}),e.type?r.getBlob(e.type):r.getBlob()}function o(t,e){return new Blob(n(t),e||{})}var i=\"undefined\"!=typeof i?i:\"undefined\"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:\"undefined\"!=typeof MSBlobBuilder?MSBlobBuilder:\"undefined\"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob([\"hi\"]);return 2===t.size}catch(e){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(e){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;\"undefined\"!=typeof Blob&&(r.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?r:void 0}()},function(t,e){e.encode=function(t){var e=\"\";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+=\"&\"),e+=encodeURIComponent(n)+\"=\"+encodeURIComponent(t[n]));return e},e.decode=function(t){for(var e={},n=t.split(\"&\"),r=0,o=n.length;r0);return e}function r(t){var e=0;for(p=0;p';i=document.createElement(e)}catch(t){i=document.createElement(\"iframe\"),i.name=o.iframeId,i.src=\"javascript:0\"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement(\"form\"),a=document.createElement(\"textarea\"),c=this.iframeId=\"eio_iframe_\"+this.index;s.className=\"socketio\",s.style.position=\"absolute\",s.style.top=\"-1000px\",s.style.left=\"-1000px\",s.target=c,s.method=\"POST\",s.setAttribute(\"accept-charset\",\"utf-8\"),a.name=\"d\",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),r(),t=t.replace(p,\"\\\\\\n\"),this.area.value=t.replace(u,\"\\\\n\");try{this.form.submit()}catch(h){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){\"complete\"===o.iframe.readyState&&n()}:this.iframe.onload=n}}).call(e,function(){return this}())},function(t,e,n){function r(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(l=i),s.call(this,t)}var o,i,s=n(23),a=n(24),c=n(32),u=n(33),p=n(34),h=n(3)(\"engine.io-client:websocket\");if(\"undefined\"!=typeof WebSocket?o=WebSocket:\"undefined\"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),\"undefined\"==typeof window)try{i=n(37)}catch(f){}var l=o||i;t.exports=r,u(r,s),r.prototype.name=\"websocket\",r.prototype.supportsBinary=!0,r.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,n={agent:this.agent,perMessageDeflate:this.perMessageDeflate};n.pfx=this.pfx,n.key=this.key,n.passphrase=this.passphrase,n.cert=this.cert,n.ca=this.ca,n.ciphers=this.ciphers,n.rejectUnauthorized=this.rejectUnauthorized,this.extraHeaders&&(n.headers=this.extraHeaders),this.localAddress&&(n.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new l(t,e):new l(t):new l(t,e,n)}catch(r){return this.emit(\"error\",r)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType=\"nodebuffer\"):this.ws.binaryType=\"arraybuffer\",this.addEventListeners()}},r.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError(\"websocket error\",e)}},r.prototype.write=function(t){function e(){n.emit(\"flush\"),setTimeout(function(){n.writable=!0,n.emit(\"drain\")},0)}var n=this;this.writable=!1;for(var r=t.length,o=0,i=r;o0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=n,n.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(t){this.ms=t},n.prototype.setMax=function(t){this.max=t},n.prototype.setJitter=function(t){this.jitter=t}}])});\n//# sourceMappingURL=socket.io.js.map" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "_transferSize": 68895 }, "cache": {}, "timings": { "blocked": 11.384000000290573, "dns": -1, "ssl": -1, "connect": -1, "send": 0.11600000000000005, "wait": 1.4629999861940741, "receive": 0.598999991780147, "_blocked_queueing": 10.962000000290573 }, "serverIPAddress": "127.0.0.1", "_initiator": { "type": "parser", "url": "http://dev.chronicler-notes.com:8000/callback?error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.&error_uri=https%3A%2F%2Fdeveloper.github.com%2Fapps%2Fmanaging-oauth-apps%2Ftroubleshooting-authorization-request-errors%2F%23redirect-uri-mismatch&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq", "lineNumber": 0 }, "_priority": "High", "_resourceType": "script", "connection": "387167", "pageref": "page_6" }, { "startedDateTime": "2019-10-22T02:03:59.823Z", "time": 93.39100000215694, "request": { "method": "GET", "url": "http://dev.chronicler-notes.com:8000/commons.js", "httpVersion": "http/1.1", "headers": [ { "name": "Referer", "value": "http://dev.chronicler-notes.com:8000/callback?error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.&error_uri=https%3A%2F%2Fdeveloper.github.com%2Fapps%2Fmanaging-oauth-apps%2Ftroubleshooting-authorization-request-errors%2F%23redirect-uri-mismatch&state=er3HpO_8qd0UZp4iM_Qn2TF0y4ITNJOq" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" } ], "queryString": [], "cookies": [], "headersSize": -1, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "http/1.1", "headers": [ { "name": "Date", "value": "Tue, 22 Oct 2019 02:03:59 GMT" }, { "name": "X-Powered-By", "value": "Express" }, { "name": "ETag", "value": "W/\"272d70-NZz6IHxCL/p9Ur9BKp4Lymovk/k\"" }, { "name": "Content-Type", "value": "application/javascript; charset=UTF-8" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Content-Length", "value": "2567536" } ], "cookies": [], "content": { "size": 2567536, "mimeType": "application/javascript", "text": "LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAovKioqKioqLyAJZnVuY3Rpb24gaG90RGlzcG9zZUNodW5rKGNodW5rSWQpIHsKLyoqKioqKi8gCQlkZWxldGUgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdOwovKioqKioqLyAJfQovKioqKioqLyAJdmFyIHBhcmVudEhvdFVwZGF0ZUNhbGxiYWNrID0gd2luZG93WyJ3ZWJwYWNrSG90VXBkYXRlIl07Ci8qKioqKiovIAl3aW5kb3dbIndlYnBhY2tIb3RVcGRhdGUiXSA9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycwovKioqKioqLyAJZnVuY3Rpb24gd2VicGFja0hvdFVwZGF0ZUNhbGxiYWNrKGNodW5rSWQsIG1vcmVNb2R1bGVzKSB7Ci8qKioqKiovIAkJaG90QWRkVXBkYXRlQ2h1bmsoY2h1bmtJZCwgbW9yZU1vZHVsZXMpOwovKioqKioqLyAJCWlmIChwYXJlbnRIb3RVcGRhdGVDYWxsYmFjaykgcGFyZW50SG90VXBkYXRlQ2FsbGJhY2soY2h1bmtJZCwgbW9yZU1vZHVsZXMpOwovKioqKioqLyAJfSA7Ci8qKioqKiovCi8qKioqKiovIAkvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMKLyoqKioqKi8gCWZ1bmN0aW9uIGhvdERvd25sb2FkVXBkYXRlQ2h1bmsoY2h1bmtJZCkgewovKioqKioqLyAJCXZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKLyoqKioqKi8gCQlzY3JpcHQuY2hhcnNldCA9ICJ1dGYtOCI7Ci8qKioqKiovIAkJc2NyaXB0LnNyYyA9IF9fd2VicGFja19yZXF1aXJlX18ucCArICIiICsgY2h1bmtJZCArICIuIiArIGhvdEN1cnJlbnRIYXNoICsgIi5ob3QtdXBkYXRlLmpzIjsKLyoqKioqKi8gCQlpZiAoImFub255bW91cyIpIHNjcmlwdC5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwovKioqKioqLyAJCWRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKLyoqKioqKi8gCX0KLyoqKioqKi8KLyoqKioqKi8gCS8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycwovKioqKioqLyAJZnVuY3Rpb24gaG90RG93bmxvYWRNYW5pZmVzdChyZXF1ZXN0VGltZW91dCkgewovKioqKioqLyAJCXJlcXVlc3RUaW1lb3V0ID0gcmVxdWVzdFRpbWVvdXQgfHwgMTAwMDA7Ci8qKioqKiovIAkJcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewovKioqKioqLyAJCQlpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ID09PSAidW5kZWZpbmVkIikgewovKioqKioqLyAJCQkJcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoIk5vIGJyb3dzZXIgc3VwcG9ydCIpKTsKLyoqKioqKi8gCQkJfQovKioqKioqLyAJCQl0cnkgewovKioqKioqLyAJCQkJdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLyoqKioqKi8gCQkJCXZhciByZXF1ZXN0UGF0aCA9IF9fd2VicGFja19yZXF1aXJlX18ucCArICIiICsgaG90Q3VycmVudEhhc2ggKyAiLmhvdC11cGRhdGUuanNvbiI7Ci8qKioqKiovIAkJCQlyZXF1ZXN0Lm9wZW4oIkdFVCIsIHJlcXVlc3RQYXRoLCB0cnVlKTsKLyoqKioqKi8gCQkJCXJlcXVlc3QudGltZW91dCA9IHJlcXVlc3RUaW1lb3V0OwovKioqKioqLyAJCQkJcmVxdWVzdC5zZW5kKG51bGwpOwovKioqKioqLyAJCQl9IGNhdGNoIChlcnIpIHsKLyoqKioqKi8gCQkJCXJldHVybiByZWplY3QoZXJyKTsKLyoqKioqKi8gCQkJfQovKioqKioqLyAJCQlyZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewovKioqKioqLyAJCQkJaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkgcmV0dXJuOwovKioqKioqLyAJCQkJaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwKSB7Ci8qKioqKiovIAkJCQkJLy8gdGltZW91dAovKioqKioqLyAJCQkJCXJlamVjdCgKLyoqKioqKi8gCQkJCQkJbmV3IEVycm9yKCJNYW5pZmVzdCByZXF1ZXN0IHRvICIgKyByZXF1ZXN0UGF0aCArICIgdGltZWQgb3V0LiIpCi8qKioqKiovIAkJCQkJKTsKLyoqKioqKi8gCQkJCX0gZWxzZSBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDQwNCkgewovKioqKioqLyAJCQkJCS8vIG5vIHVwZGF0ZSBhdmFpbGFibGUKLyoqKioqKi8gCQkJCQlyZXNvbHZlKCk7Ci8qKioqKiovIAkJCQl9IGVsc2UgaWYgKHJlcXVlc3Quc3RhdHVzICE9PSAyMDAgJiYgcmVxdWVzdC5zdGF0dXMgIT09IDMwNCkgewovKioqKioqLyAJCQkJCS8vIG90aGVyIGZhaWx1cmUKLyoqKioqKi8gCQkJCQlyZWplY3QobmV3IEVycm9yKCJNYW5pZmVzdCByZXF1ZXN0IHRvICIgKyByZXF1ZXN0UGF0aCArICIgZmFpbGVkLiIpKTsKLyoqKioqKi8gCQkJCX0gZWxzZSB7Ci8qKioqKiovIAkJCQkJLy8gc3VjY2VzcwovKioqKioqLyAJCQkJCXRyeSB7Ci8qKioqKiovIAkJCQkJCXZhciB1cGRhdGUgPSBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTsKLyoqKioqKi8gCQkJCQl9IGNhdGNoIChlKSB7Ci8qKioqKiovIAkJCQkJCXJlamVjdChlKTsKLyoqKioqKi8gCQkJCQkJcmV0dXJuOwovKioqKioqLyAJCQkJCX0KLyoqKioqKi8gCQkJCQlyZXNvbHZlKHVwZGF0ZSk7Ci8qKioqKiovIAkJCQl9Ci8qKioqKiovIAkJCX07Ci8qKioqKiovIAkJfSk7Ci8qKioqKiovIAl9Ci8qKioqKiovCi8qKioqKiovIAl2YXIgaG90QXBwbHlPblVwZGF0ZSA9IHRydWU7Ci8qKioqKiovIAkvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMKLyoqKioqKi8gCXZhciBob3RDdXJyZW50SGFzaCA9ICIyZGFkZjc0YmViYzYxMTg5NDJlYiI7Ci8qKioqKiovIAl2YXIgaG90UmVxdWVzdFRpbWVvdXQgPSAxMDAwMDsKLyoqKioqKi8gCXZhciBob3RDdXJyZW50TW9kdWxlRGF0YSA9IHt9OwovKioqKioqLyAJdmFyIGhvdEN1cnJlbnRDaGlsZE1vZHVsZTsKLyoqKioqKi8gCS8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycwovKioqKioqLyAJdmFyIGhvdEN1cnJlbnRQYXJlbnRzID0gW107Ci8qKioqKiovIAkvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMKLyoqKioqKi8gCXZhciBob3RDdXJyZW50UGFyZW50c1RlbXAgPSBbXTsKLyoqKioqKi8KLyoqKioqKi8gCS8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycwovKioqKioqLyAJZnVuY3Rpb24gaG90Q3JlYXRlUmVxdWlyZShtb2R1bGVJZCkgewovKioqKioqLyAJCXZhciBtZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdOwovKioqKioqLyAJCWlmICghbWUpIHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fOwovKioqKioqLyAJCXZhciBmbiA9IGZ1bmN0aW9uKHJlcXVlc3QpIHsKLyoqKioqKi8gCQkJaWYgKG1lLmhvdC5hY3RpdmUpIHsKLyoqKioqKi8gCQkJCWlmIChpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdKSB7Ci8qKioqKiovIAkJCQkJaWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKSA9PT0gLTEpIHsKLyoqKioqKi8gCQkJCQkJaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XS5wYXJlbnRzLnB1c2gobW9kdWxlSWQpOwovKioqKioqLyAJCQkJCX0KLyoqKioqKi8gCQkJCX0gZWxzZSB7Ci8qKioqKiovIAkJCQkJaG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdOwovKioqKioqLyAJCQkJCWhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IHJlcXVlc3Q7Ci8qKioqKiovIAkJCQl9Ci8qKioqKiovIAkJCQlpZiAobWUuY2hpbGRyZW4uaW5kZXhPZihyZXF1ZXN0KSA9PT0gLTEpIHsKLyoqKioqKi8gCQkJCQltZS5jaGlsZHJlbi5wdXNoKHJlcXVlc3QpOwovKioqKioqLyAJCQkJfQovKioqKioqLyAJCQl9IGVsc2UgewovKioqKioqLyAJCQkJY29uc29sZS53YXJuKAovKioqKioqLyAJCQkJCSJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoIiArCi8qKioqKiovIAkJCQkJCXJlcXVlc3QgKwovKioqKioqLyAJCQkJCQkiKSBmcm9tIGRpc3Bvc2VkIG1vZHVsZSAiICsKLyoqKioqKi8gCQkJCQkJbW9kdWxlSWQKLyoqKioqKi8gCQkJCSk7Ci8qKioqKiovIAkJCQlob3RDdXJyZW50UGFyZW50cyA9IFtdOwovKioqKioqLyAJCQl9Ci8qKioqKiovIAkJCXJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKHJlcXVlc3QpOwovKioqKioqLyAJCX07Ci8qKioqKiovIAkJdmFyIE9iamVjdEZhY3RvcnkgPSBmdW5jdGlvbiBPYmplY3RGYWN0b3J5KG5hbWUpIHsKLyoqKioqKi8gCQkJcmV0dXJuIHsKLyoqKioqKi8gCQkJCWNvbmZpZ3VyYWJsZTogdHJ1ZSwKLyoqKioqKi8gCQkJCWVudW1lcmFibGU6IHRydWUsCi8qKioqKiovIAkJCQlnZXQ6IGZ1bmN0aW9uKCkgewovKioqKioqLyAJCQkJCXJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fW25hbWVdOwovKioqKioqLyAJCQkJfSwKLyoqKioqKi8gCQkJCXNldDogZnVuY3Rpb24odmFsdWUpIHsKLyoqKioqKi8gCQkJCQlfX3dlYnBhY2tfcmVxdWlyZV9fW25hbWVdID0gdmFsdWU7Ci8qKioqKiovIAkJCQl9Ci8qKioqKiovIAkJCX07Ci8qKioqKiovIAkJfTsKLyoqKioqKi8gCQlmb3IgKHZhciBuYW1lIGluIF9fd2VicGFja19yZXF1aXJlX18pIHsKLyoqKioqKi8gCQkJaWYgKAovKioqKioqLyAJCQkJT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9fd2VicGFja19yZXF1aXJlX18sIG5hbWUpICYmCi8qKioqKiovIAkJCQluYW1lICE9PSAiZSIgJiYKLyoqKioqKi8gCQkJCW5hbWUgIT09ICJ0IgovKioqKioqLyAJCQkpIHsKLyoqKioqKi8gCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgbmFtZSwgT2JqZWN0RmFjdG9yeShuYW1lKSk7Ci8qKioqKiovIAkJCX0KLyoqKioqKi8gCQl9Ci8qKioqKiovIAkJZm4uZSA9IGZ1bmN0aW9uKGNodW5rSWQpIHsKLyoqKioqKi8gCQkJaWYgKGhvdFN0YXR1cyA9PT0gInJlYWR5IikgaG90U2V0U3RhdHVzKCJwcmVwYXJlIik7Ci8qKioqKiovIAkJCWhvdENodW5rc0xvYWRpbmcrKzsKLyoqKioqKi8gCQkJcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZShjaHVua0lkKS50aGVuKGZpbmlzaENodW5rTG9hZGluZywgZnVuY3Rpb24oZXJyKSB7Ci8qKioqKiovIAkJCQlmaW5pc2hDaHVua0xvYWRpbmcoKTsKLyoqKioqKi8gCQkJCXRocm93IGVycjsKLyoqKioqKi8gCQkJfSk7Ci8qKioqKiovCi8qKioqKiovIAkJCWZ1bmN0aW9uIGZpbmlzaENodW5rTG9hZGluZygpIHsKLyoqKioqKi8gCQkJCWhvdENodW5rc0xvYWRpbmctLTsKLyoqKioqKi8gCQkJCWlmIChob3RTdGF0dXMgPT09ICJwcmVwYXJlIikgewovKioqKioqLyAJCQkJCWlmICghaG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdKSB7Ci8qKioqKiovIAkJCQkJCWhvdEVuc3VyZVVwZGF0ZUNodW5rKGNodW5rSWQpOwovKioqKioqLyAJCQkJCX0KLyoqKioqKi8gCQkJCQlpZiAoaG90Q2h1bmtzTG9hZGluZyA9PT0gMCAmJiBob3RXYWl0aW5nRmlsZXMgPT09IDApIHsKLyoqKioqKi8gCQkJCQkJaG90VXBkYXRlRG93bmxvYWRlZCgpOwovKioqKioqLyAJCQkJCX0KLyoqKioqKi8gCQkJCX0KLyoqKioqKi8gCQkJfQovKioqKioqLyAJCX07Ci8qKioqKiovIAkJZm4udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7Ci8qKioqKiovIAkJCWlmIChtb2RlICYgMSkgdmFsdWUgPSBmbih2YWx1ZSk7Ci8qKioqKiovIAkJCXJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLnQodmFsdWUsIG1vZGUgJiB+MSk7Ci8qKioqKiovIAkJfTsKLyoqKioqKi8gCQlyZXR1cm4gZm47Ci8qKioqKiovIAl9Ci8qKioqKiovCi8qKioqKiovIAkvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMKLyoqKioqKi8gCWZ1bmN0aW9uIGhvdENyZWF0ZU1vZHVsZShtb2R1bGVJZCkgewovKioqKioqLyAJCXZhciBob3QgPSB7Ci8qKioqKiovIAkJCS8vIHByaXZhdGUgc3R1ZmYKLyoqKioqKi8gCQkJX2FjY2VwdGVkRGVwZW5kZW5jaWVzOiB7fSwKLyoqKioqKi8gCQkJX2RlY2xpbmVkRGVwZW5kZW5jaWVzOiB7fSwKLyoqKioqKi8gCQkJX3NlbGZBY2NlcHRlZDogZmFsc2UsCi8qKioqKiovIAkJCV9zZWxmRGVjbGluZWQ6IGZhbHNlLAovKioqKioqLyAJCQlfZGlzcG9zZUhhbmRsZXJzOiBbXSwKLyoqKioqKi8gCQkJX21haW46IGhvdEN1cnJlbnRDaGlsZE1vZHVsZSAhPT0gbW9kdWxlSWQsCi8qKioqKiovCi8qKioqKiovIAkJCS8vIE1vZHVsZSBBUEkKLyoqKioqKi8gCQkJYWN0aXZlOiB0cnVlLAovKioqKioqLyAJCQlhY2NlcHQ6IGZ1bmN0aW9uKGRlcCwgY2FsbGJhY2spIHsKLyoqKioqKi8gCQkJCWlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmQWNjZXB0ZWQgPSB0cnVlOwovKioqKioqLyAJCQkJZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gImZ1bmN0aW9uIikgaG90Ll9zZWxmQWNjZXB0ZWQgPSBkZXA7Ci8qKioqKiovIAkJCQllbHNlIGlmICh0eXBlb2YgZGVwID09PSAib2JqZWN0IikKLyoqKioqKi8gCQkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKykKLyoqKioqKi8gCQkJCQkJaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tkZXBbaV1dID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTsKLyoqKioqKi8gCQkJCWVsc2UgaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tkZXBdID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTsKLyoqKioqKi8gCQkJfSwKLyoqKioqKi8gCQkJZGVjbGluZTogZnVuY3Rpb24oZGVwKSB7Ci8qKioqKiovIAkJCQlpZiAoZGVwID09PSB1bmRlZmluZWQpIGhvdC5fc2VsZkRlY2xpbmVkID0gdHJ1ZTsKLyoqKioqKi8gCQkJCWVsc2UgaWYgKHR5cGVvZiBkZXAgPT09ICJvYmplY3QiKQovKioqKioqLyAJCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKQovKioqKioqLyAJCQkJCQlob3QuX2RlY2xpbmVkRGVwZW5kZW5jaWVzW2RlcFtpXV0gPSB0cnVlOwovKioqKioqLyAJCQkJZWxzZSBob3QuX2RlY2xpbmVkRGVwZW5kZW5jaWVzW2RlcF0gPSB0cnVlOwovKioqKioqLyAJCQl9LAovKioqKioqLyAJCQlkaXNwb3NlOiBmdW5jdGlvbihjYWxsYmFjaykgewovKioqKioqLyAJCQkJaG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7Ci8qKioqKiovIAkJCX0sCi8qKioqKiovIAkJCWFkZERpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbihjYWxsYmFjaykgewovKioqKioqLyAJCQkJaG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7Ci8qKioqKiovIAkJCX0sCi8qKioqKiovIAkJCXJlbW92ZURpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbihjYWxsYmFjaykgewovKioqKioqLyAJCQkJdmFyIGlkeCA9IGhvdC5fZGlzcG9zZUhhbmRsZXJzLmluZGV4T2YoY2FsbGJhY2spOwovKioqKioqLyAJCQkJaWYgKGlkeCA+PSAwKSBob3QuX2Rpc3Bvc2VIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTsKLyoqKioqKi8gCQkJfSwKLyoqKioqKi8KLyoqKioqKi8gCQkJLy8gTWFuYWdlbWVudCBBUEkKLyoqKioqKi8gCQkJY2hlY2s6IGhvdENoZWNrLAovKioqKioqLyAJCQlhcHBseTogaG90QXBwbHksCi8qKioqKiovIAkJCXN0YXR1czogZnVuY3Rpb24obCkgewovKioqKioqLyAJCQkJaWYgKCFsKSByZXR1cm4gaG90U3RhdHVzOwovKioqKioqLyAJCQkJaG90U3RhdHVzSGFuZGxlcnMucHVzaChsKTsKLyoqKioqKi8gCQkJfSwKLyoqKioqKi8gCQkJYWRkU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkgewovKioqKioqLyAJCQkJaG90U3RhdHVzSGFuZGxlcnMucHVzaChsKTsKLyoqKioqKi8gCQkJfSwKLyoqKioqKi8gCQkJcmVtb3ZlU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkgewovKioqKioqLyAJCQkJdmFyIGlkeCA9IGhvdFN0YXR1c0hhbmRsZXJzLmluZGV4T2YobCk7Ci8qKioqKiovIAkJCQlpZiAoaWR4ID49IDApIGhvdFN0YXR1c0hhbmRsZXJzLnNwbGljZShpZHgsIDEpOwovKioqKioqLyAJCQl9LAovKioqKioqLwovKioqKioqLyAJCQkvL2luaGVyaXQgZnJvbSBwcmV2aW91cyBkaXNwb3NlIGNhbGwKLyoqKioqKi8gCQkJZGF0YTogaG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdCi8qKioqKiovIAkJfTsKLyoqKioqKi8gCQlob3RDdXJyZW50Q2hpbGRNb2R1bGUgPSB1bmRlZmluZWQ7Ci8qKioqKiovIAkJcmV0dXJuIGhvdDsKLyoqKioqKi8gCX0KLyoqKioqKi8KLyoqKioqKi8gCXZhciBob3RTdGF0dXNIYW5kbGVycyA9IFtdOwovKioqKioqLyAJdmFyIGhvdFN0YXR1cyA9ICJpZGxlIjsKLyoqKioqKi8KLyoqKioqKi8gCWZ1bmN0aW9uIGhvdFNldFN0YXR1cyhuZXdTdGF0dXMpIHsKLyoqKioqKi8gCQlob3RTdGF0dXMgPSBuZXdTdGF0dXM7Ci8qKioqKiovIAkJZm9yICh2YXIgaSA9IDA7IGkgPCBob3RTdGF0dXNIYW5kbGVycy5sZW5ndGg7IGkrKykKLyoqKioqKi8gCQkJaG90U3RhdHVzSGFuZGxlcnNbaV0uY2FsbChudWxsLCBuZXdTdGF0dXMpOwovKioqKioqLyAJfQovKioqKioqLwovKioqKioqLyAJLy8gd2hpbGUgZG93bmxvYWRpbmcKLyoqKioqKi8gCXZhciBob3RXYWl0aW5nRmlsZXMgPSAwOwovKioqKioqLyAJdmFyIGhvdENodW5rc0xvYWRpbmcgPSAwOwovKioqKioqLyAJdmFyIGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9OwovKioqKioqLyAJdmFyIGhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307Ci8qKioqKiovIAl2YXIgaG90QXZhaWxhYmxlRmlsZXNNYXAgPSB7fTsKLyoqKioqKi8gCXZhciBob3REZWZlcnJlZDsKLyoqKioqKi8KLyoqKioqKi8gCS8vIFRoZSB1cGRhdGUgaW5mbwovKioqKioqLyAJdmFyIGhvdFVwZGF0ZSwgaG90VXBkYXRlTmV3SGFzaDsKLyoqKioqKi8KLyoqKioqKi8gCWZ1bmN0aW9uIHRvTW9kdWxlSWQoaWQpIHsKLyoqKioqKi8gCQl2YXIgaXNOdW1iZXIgPSAraWQgKyAiIiA9PT0gaWQ7Ci8qKioqKiovIAkJcmV0dXJuIGlzTnVtYmVyID8gK2lkIDogaWQ7Ci8qKioqKiovIAl9Ci8qKioqKiovCi8qKioqKiovIAlmdW5jdGlvbiBob3RDaGVjayhhcHBseSkgewovKioqKioqLyAJCWlmIChob3RTdGF0dXMgIT09ICJpZGxlIikgewovKioqKioqLyAJCQl0aHJvdyBuZXcgRXJyb3IoImNoZWNrKCkgaXMgb25seSBhbGxvd2VkIGluIGlkbGUgc3RhdHVzIik7Ci8qKioqKiovIAkJfQovKioqKioqLyAJCWhvdEFwcGx5T25VcGRhdGUgPSBhcHBseTsKLyoqKioqKi8gCQlob3RTZXRTdGF0dXMoImNoZWNrIik7Ci8qKioqKiovIAkJcmV0dXJuIGhvdERvd25sb2FkTWFuaWZlc3QoaG90UmVxdWVzdFRpbWVvdXQpLnRoZW4oZnVuY3Rpb24odXBkYXRlKSB7Ci8qKioqKiovIAkJCWlmICghdXBkYXRlKSB7Ci8qKioqKiovIAkJCQlob3RTZXRTdGF0dXMoImlkbGUiKTsKLyoqKioqKi8gCQkJCXJldHVybiBudWxsOwovKioqKioqLyAJCQl9Ci8qKioqKiovIAkJCWhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307Ci8qKioqKiovIAkJCWhvdFdhaXRpbmdGaWxlc01hcCA9IHt9OwovKioqKioqLyAJCQlob3RBdmFpbGFibGVGaWxlc01hcCA9IHVwZGF0ZS5jOwovKioqKioqLyAJCQlob3RVcGRhdGVOZXdIYXNoID0gdXBkYXRlLmg7Ci8qKioqKiovCi8qKioqKiovIAkJCWhvdFNldFN0YXR1cygicHJlcGFyZSIpOwovKioqKioqLyAJCQl2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewovKioqKioqLyAJCQkJaG90RGVmZXJyZWQgPSB7Ci8qKioqKiovIAkJCQkJcmVzb2x2ZTogcmVzb2x2ZSwKLyoqKioqKi8gCQkJCQlyZWplY3Q6IHJlamVjdAovKioqKioqLyAJCQkJfTsKLyoqKioqKi8gCQkJfSk7Ci8qKioqKiovIAkJCWhvdFVwZGF0ZSA9IHt9OwovKioqKioqLyAJCQl2YXIgY2h1bmtJZCA9ICJjb21tb25zIjsKLyoqKioqKi8gCQkJLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvbmUtYmxvY2tzCi8qKioqKiovIAkJCXsKLyoqKioqKi8gCQkJCS8qZ2xvYmFscyBjaHVua0lkICovCi8qKioqKiovIAkJCQlob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKTsKLyoqKioqKi8gCQkJfQovKioqKioqLyAJCQlpZiAoCi8qKioqKiovIAkJCQlob3RTdGF0dXMgPT09ICJwcmVwYXJlIiAmJgovKioqKioqLyAJCQkJaG90Q2h1bmtzTG9hZGluZyA9PT0gMCAmJgovKioqKioqLyAJCQkJaG90V2FpdGluZ0ZpbGVzID09PSAwCi8qKioqKiovIAkJCSkgewovKioqKioqLyAJCQkJaG90VXBkYXRlRG93bmxvYWRlZCgpOwovKioqKioqLyAJCQl9Ci8qKioqKiovIAkJCXJldHVybiBwcm9taXNlOwovKioqKioqLyAJCX0pOwovKioqKioqLyAJfQovKioqKioqLwovKioqKioqLyAJLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCi8qKioqKiovIAlmdW5jdGlvbiBob3RBZGRVcGRhdGVDaHVuayhjaHVua0lkLCBtb3JlTW9kdWxlcykgewovKioqKioqLyAJCWlmICghaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0gfHwgIWhvdFJlcXVlc3RlZEZpbGVzTWFwW2NodW5rSWRdKQovKioqKioqLyAJCQlyZXR1cm47Ci8qKioqKiovIAkJaG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0gPSBmYWxzZTsKLyoqKioqKi8gCQlmb3IgKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykgewovKioqKioqLyAJCQlpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHsKLyoqKioqKi8gCQkJCWhvdFVwZGF0ZVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07Ci8qKioqKiovIAkJCX0KLyoqKioqKi8gCQl9Ci8qKioqKiovIAkJaWYgKC0taG90V2FpdGluZ0ZpbGVzID09PSAwICYmIGhvdENodW5rc0xvYWRpbmcgPT09IDApIHsKLyoqKioqKi8gCQkJaG90VXBkYXRlRG93bmxvYWRlZCgpOwovKioqKioqLyAJCX0KLyoqKioqKi8gCX0KLyoqKioqKi8KLyoqKioqKi8gCWZ1bmN0aW9uIGhvdEVuc3VyZVVwZGF0ZUNodW5rKGNodW5rSWQpIHsKLyoqKioqKi8gCQlpZiAoIWhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdKSB7Ci8qKioqKiovIAkJCWhvdFdhaXRpbmdGaWxlc01hcFtjaHVua0lkXSA9IHRydWU7Ci8qKioqKiovIAkJfSBlbHNlIHsKLyoqKioqKi8gCQkJaG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0gPSB0cnVlOwovKioqKioqLyAJCQlob3RXYWl0aW5nRmlsZXMrKzsKLyoqKioqKi8gCQkJaG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKTsKLyoqKioqKi8gCQl9Ci8qKioqKiovIAl9Ci8qKioqKiovCi8qKioqKiovIAlmdW5jdGlvbiBob3RVcGRhdGVEb3dubG9hZGVkKCkgewovKioqKioqLyAJCWhvdFNldFN0YXR1cygicmVhZHkiKTsKLyoqKioqKi8gCQl2YXIgZGVmZXJyZWQgPSBob3REZWZlcnJlZDsKLyoqKioqKi8gCQlob3REZWZlcnJlZCA9IG51bGw7Ci8qKioqKiovIAkJaWYgKCFkZWZlcnJlZCkgcmV0dXJuOwovKioqKioqLyAJCWlmIChob3RBcHBseU9uVXBkYXRlKSB7Ci8qKioqKiovIAkJCS8vIFdyYXAgZGVmZXJyZWQgb2JqZWN0IGluIFByb21pc2UgdG8gbWFyayBpdCBhcyBhIHdlbGwtaGFuZGxlZCBQcm9taXNlIHRvCi8qKioqKiovIAkJCS8vIGF2b2lkIHRyaWdnZXJpbmcgdW5jYXVnaHQgZXhjZXB0aW9uIHdhcm5pbmcgaW4gQ2hyb21lLgovKioqKioqLyAJCQkvLyBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDY1NjY2Ci8qKioqKiovIAkJCVByb21pc2UucmVzb2x2ZSgpCi8qKioqKiovIAkJCQkudGhlbihmdW5jdGlvbigpIHsKLyoqKioqKi8gCQkJCQlyZXR1cm4gaG90QXBwbHkoaG90QXBwbHlPblVwZGF0ZSk7Ci8qKioqKiovIAkJCQl9KQovKioqKioqLyAJCQkJLnRoZW4oCi8qKioqKiovIAkJCQkJZnVuY3Rpb24ocmVzdWx0KSB7Ci8qKioqKiovIAkJCQkJCWRlZmVycmVkLnJlc29sdmUocmVzdWx0KTsKLyoqKioqKi8gCQkJCQl9LAovKioqKioqLyAJCQkJCWZ1bmN0aW9uKGVycikgewovKioqKioqLyAJCQkJCQlkZWZlcnJlZC5yZWplY3QoZXJyKTsKLyoqKioqKi8gCQkJCQl9Ci8qKioqKiovIAkJCQkpOwovKioqKioqLyAJCX0gZWxzZSB7Ci8qKioqKiovIAkJCXZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTsKLyoqKioqKi8gCQkJZm9yICh2YXIgaWQgaW4gaG90VXBkYXRlKSB7Ci8qKioqKiovIAkJCQlpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhvdFVwZGF0ZSwgaWQpKSB7Ci8qKioqKiovIAkJCQkJb3V0ZGF0ZWRNb2R1bGVzLnB1c2godG9Nb2R1bGVJZChpZCkpOwovKioqKioqLyAJCQkJfQovKioqKioqLyAJCQl9Ci8qKioqKiovIAkJCWRlZmVycmVkLnJlc29sdmUob3V0ZGF0ZWRNb2R1bGVzKTsKLyoqKioqKi8gCQl9Ci8qKioqKiovIAl9Ci8qKioqKiovCi8qKioqKiovIAlmdW5jdGlvbiBob3RBcHBseShvcHRpb25zKSB7Ci8qKioqKiovIAkJaWYgKGhvdFN0YXR1cyAhPT0gInJlYWR5IikKLyoqKioqKi8gCQkJdGhyb3cgbmV3IEVycm9yKCJhcHBseSgpIGlzIG9ubHkgYWxsb3dlZCBpbiByZWFkeSBzdGF0dXMiKTsKLyoqKioqKi8gCQlvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLyoqKioqKi8KLyoqKioqKi8gCQl2YXIgY2I7Ci8qKioqKiovIAkJdmFyIGk7Ci8qKioqKiovIAkJdmFyIGo7Ci8qKioqKiovIAkJdmFyIG1vZHVsZTsKLyoqKioqKi8gCQl2YXIgbW9kdWxlSWQ7Ci8qKioqKiovCi8qKioqKiovIAkJZnVuY3Rpb24gZ2V0QWZmZWN0ZWRTdHVmZih1cGRhdGVNb2R1bGVJZCkgewovKioqKioqLyAJCQl2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW3VwZGF0ZU1vZHVsZUlkXTsKLyoqKioqKi8gCQkJdmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307Ci8qKioqKiovCi8qKioqKiovIAkJCXZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5tYXAoZnVuY3Rpb24oaWQpIHsKLyoqKioqKi8gCQkJCXJldHVybiB7Ci8qKioqKiovIAkJCQkJY2hhaW46IFtpZF0sCi8qKioqKiovIAkJCQkJaWQ6IGlkCi8qKioqKiovIAkJCQl9OwovKioqKioqLyAJCQl9KTsKLyoqKioqKi8gCQkJd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHsKLyoqKioqKi8gCQkJCXZhciBxdWV1ZUl0ZW0gPSBxdWV1ZS5wb3AoKTsKLyoqKioqKi8gCQkJCXZhciBtb2R1bGVJZCA9IHF1ZXVlSXRlbS5pZDsKLyoqKioqKi8gCQkJCXZhciBjaGFpbiA9IHF1ZXVlSXRlbS5jaGFpbjsKLyoqKioqKi8gCQkJCW1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdOwovKioqKioqLyAJCQkJaWYgKCFtb2R1bGUgfHwgbW9kdWxlLmhvdC5fc2VsZkFjY2VwdGVkKSBjb250aW51ZTsKLyoqKioqKi8gCQkJCWlmIChtb2R1bGUuaG90Ll9zZWxmRGVjbGluZWQpIHsKLyoqKioqKi8gCQkJCQlyZXR1cm4gewovKioqKioqLyAJCQkJCQl0eXBlOiAic2VsZi1kZWNsaW5lZCIsCi8qKioqKiovIAkJCQkJCWNoYWluOiBjaGFpbiwKLyoqKioqKi8gCQkJCQkJbW9kdWxlSWQ6IG1vZHVsZUlkCi8qKioqKiovIAkJCQkJfTsKLyoqKioqKi8gCQkJCX0KLyoqKioqKi8gCQkJCWlmIChtb2R1bGUuaG90Ll9tYWluKSB7Ci8qKioqKiovIAkJCQkJcmV0dXJuIHsKLyoqKioqKi8gCQkJCQkJdHlwZTogInVuYWNjZXB0ZWQiLAovKioqKioqLyAJCQkJCQljaGFpbjogY2hhaW4sCi8qKioqKiovIAkJCQkJCW1vZHVsZUlkOiBtb2R1bGVJZAovKioqKioqLyAJCQkJCX07Ci8qKioqKiovIAkJCQl9Ci8qKioqKiovIAkJCQlmb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZS5wYXJlbnRzLmxlbmd0aDsgaSsrKSB7Ci8qKioqKiovIAkJCQkJdmFyIHBhcmVudElkID0gbW9kdWxlLnBhcmVudHNbaV07Ci8qKioqKiovIAkJCQkJdmFyIHBhcmVudCA9IGluc3RhbGxlZE1vZHVsZXNbcGFyZW50SWRdOwovKioqKioqLyAJCQkJCWlmICghcGFyZW50KSBjb250aW51ZTsKLyoqKioqKi8gCQkJCQlpZiAocGFyZW50LmhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7Ci8qKioqKiovIAkJCQkJCXJldHVybiB7Ci8qKioqKiovIAkJCQkJCQl0eXBlOiAiZGVjbGluZWQiLAovKioqKioqLyAJCQkJCQkJY2hhaW46IGNoYWluLmNvbmNhdChbcGFyZW50SWRdKSwKLyoqKioqKi8gCQkJCQkJCW1vZHVsZUlkOiBtb2R1bGVJZCwKLyoqKioqKi8gCQkJCQkJCXBhcmVudElkOiBwYXJlbnRJZAovKioqKioqLyAJCQkJCQl9OwovKioqKioqLyAJCQkJCX0KLyoqKioqKi8gCQkJCQlpZiAob3V0ZGF0ZWRNb2R1bGVzLmluZGV4T2YocGFyZW50SWQpICE9PSAtMSkgY29udGludWU7Ci8qKioqKiovIAkJCQkJaWYgKHBhcmVudC5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkgewovKioqKioqLyAJCQkJCQlpZiAoIW91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSkKLyoqKioqKi8gCQkJCQkJCW91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSA9IFtdOwovKioqKioqLyAJCQkJCQlhZGRBbGxUb1NldChvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0sIFttb2R1bGVJZF0pOwovKioqKioqLyAJCQkJCQljb250aW51ZTsKLyoqKioqKi8gCQkJCQl9Ci8qKioqKiovIAkJCQkJZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXTsKLyoqKioqKi8gCQkJCQlvdXRkYXRlZE1vZHVsZXMucHVzaChwYXJlbnRJZCk7Ci8qKioqKiovIAkJCQkJcXVldWUucHVzaCh7Ci8qKioqKiovIAkJCQkJCWNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksCi8qKioqKiovIAkJCQkJCWlkOiBwYXJlbnRJZAovKioqKioqLyAJCQkJCX0pOwovKioqKioqLyAJCQkJfQovKioqKioqLyAJCQl9Ci8qKioqKiovCi8qKioqKiovIAkJCXJldHVybiB7Ci8qKioqKiovIAkJCQl0eXBlOiAiYWNjZXB0ZWQiLAovKioqKioqLyAJCQkJbW9kdWxlSWQ6IHVwZGF0ZU1vZHVsZUlkLAovKioqKioqLyAJCQkJb3V0ZGF0ZWRNb2R1bGVzOiBvdXRkYXRlZE1vZHVsZXMsCi8qKioqKiovIAkJCQlvdXRkYXRlZERlcGVuZGVuY2llczogb3V0ZGF0ZWREZXBlbmRlbmNpZXMKLyoqKioqKi8gCQkJfTsKLyoqKioqKi8gCQl9Ci8qKioqKiovCi8qKioqKiovIAkJZnVuY3Rpb24gYWRkQWxsVG9TZXQoYSwgYikgewovKioqKioqLyAJCQlmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHsKLyoqKioqKi8gCQkJCXZhciBpdGVtID0gYltpXTsKLyoqKioqKi8gCQkJCWlmIChhLmluZGV4T2YoaXRlbSkgPT09IC0xKSBhLnB1c2goaXRlbSk7Ci8qKioqKiovIAkJCX0KLyoqKioqKi8gCQl9Ci8qKioqKiovCi8qKioqKiovIAkJLy8gYXQgYmVnaW4gYWxsIHVwZGF0ZXMgbW9kdWxlcyBhcmUgb3V0ZGF0ZWQKLyoqKioqKi8gCQkvLyB0aGUgIm91dGRhdGVkIiBzdGF0dXMgY2FuIHByb3BhZ2F0ZSB0byBwYXJlbnRzIGlmIHRoZXkgZG9uJ3QgYWNjZXB0IHRoZSBjaGlsZHJlbgovKioqKioqLyAJCXZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9OwovKioqKioqLyAJCXZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTsKLyoqKioqKi8gCQl2YXIgYXBwbGllZFVwZGF0ZSA9IHt9OwovKioqKioqLwovKioqKioqLyAJCXZhciB3YXJuVW5leHBlY3RlZFJlcXVpcmUgPSBmdW5jdGlvbiB3YXJuVW5leHBlY3RlZFJlcXVpcmUoKSB7Ci8qKioqKiovIAkJCWNvbnNvbGUud2FybigKLyoqKioqKi8gCQkJCSJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoIiArIHJlc3VsdC5tb2R1bGVJZCArICIpIHRvIGRpc3Bvc2VkIG1vZHVsZSIKLyoqKioqKi8gCQkJKTsKLyoqKioqKi8gCQl9OwovKioqKioqLwovKioqKioqLyAJCWZvciAodmFyIGlkIGluIGhvdFVwZGF0ZSkgewovKioqKioqLyAJCQlpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhvdFVwZGF0ZSwgaWQpKSB7Ci8qKioqKiovIAkJCQltb2R1bGVJZCA9IHRvTW9kdWxlSWQoaWQpOwovKioqKioqLyAJCQkJLyoqIEB0eXBlIHtUT0RPfSAqLwovKioqKioqLyAJCQkJdmFyIHJlc3VsdDsKLyoqKioqKi8gCQkJCWlmIChob3RVcGRhdGVbaWRdKSB7Ci8qKioqKiovIAkJCQkJcmVzdWx0ID0gZ2V0QWZmZWN0ZWRTdHVmZihtb2R1bGVJZCk7Ci8qKioqKiovIAkJCQl9IGVsc2UgewovKioqKioqLyAJCQkJCXJlc3VsdCA9IHsKLyoqKioqKi8gCQkJCQkJdHlwZTogImRpc3Bvc2VkIiwKLyoqKioqKi8gCQkJCQkJbW9kdWxlSWQ6IGlkCi8qKioqKiovIAkJCQkJfTsKLyoqKioqKi8gCQkJCX0KLyoqKioqKi8gCQkJCS8qKiBAdHlwZSB7RXJyb3J8ZmFsc2V9ICovCi8qKioqKiovIAkJCQl2YXIgYWJvcnRFcnJvciA9IGZhbHNlOwovKioqKioqLyAJCQkJdmFyIGRvQXBwbHkgPSBmYWxzZTsKLyoqKioqKi8gCQkJCXZhciBkb0Rpc3Bvc2UgPSBmYWxzZTsKLyoqKioqKi8gCQkJCXZhciBjaGFpbkluZm8gPSAiIjsKLyoqKioqKi8gCQkJCWlmIChyZXN1bHQuY2hhaW4pIHsKLyoqKioqKi8gCQkJCQljaGFpbkluZm8gPSAiXG5VcGRhdGUgcHJvcGFnYXRpb246ICIgKyByZXN1bHQuY2hhaW4uam9pbigiIC0+ICIpOwovKioqKioqLyAJCQkJfQovKioqKioqLyAJCQkJc3dpdGNoIChyZXN1bHQudHlwZSkgewovKioqKioqLyAJCQkJCWNhc2UgInNlbGYtZGVjbGluZWQiOgovKioqKioqLyAJCQkJCQlpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTsKLyoqKioqKi8gCQkJCQkJaWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKQovKioqKioqLyAJCQkJCQkJYWJvcnRFcnJvciA9IG5ldyBFcnJvcigKLyoqKioqKi8gCQkJCQkJCQkiQWJvcnRlZCBiZWNhdXNlIG9mIHNlbGYgZGVjbGluZTogIiArCi8qKioqKiovIAkJCQkJCQkJCXJlc3VsdC5tb2R1bGVJZCArCi8qKioqKiovIAkJCQkJCQkJCWNoYWluSW5mbwovKioqKioqLyAJCQkJCQkJKTsKLyoqKioqKi8gCQkJCQkJYnJlYWs7Ci8qKioqKiovIAkJCQkJY2FzZSAiZGVjbGluZWQiOgovKioqKioqLyAJCQkJCQlpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTsKLyoqKioqKi8gCQkJCQkJaWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKQovKioqKioqLyAJCQkJCQkJYWJvcnRFcnJvciA9IG5ldyBFcnJvcigKLyoqKioqKi8gCQkJCQkJCQkiQWJvcnRlZCBiZWNhdXNlIG9mIGRlY2xpbmVkIGRlcGVuZGVuY3k6ICIgKwovKioqKioqLyAJCQkJCQkJCQlyZXN1bHQubW9kdWxlSWQgKwovKioqKioqLyAJCQkJCQkJCQkiIGluICIgKwovKioqKioqLyAJCQkJCQkJCQlyZXN1bHQucGFyZW50SWQgKwovKioqKioqLyAJCQkJCQkJCQljaGFpbkluZm8KLyoqKioqKi8gCQkJCQkJCSk7Ci8qKioqKiovIAkJCQkJCWJyZWFrOwovKioqKioqLyAJCQkJCWNhc2UgInVuYWNjZXB0ZWQiOgovKioqKioqLyAJCQkJCQlpZiAob3B0aW9ucy5vblVuYWNjZXB0ZWQpIG9wdGlvbnMub25VbmFjY2VwdGVkKHJlc3VsdCk7Ci8qKioqKiovIAkJCQkJCWlmICghb3B0aW9ucy5pZ25vcmVVbmFjY2VwdGVkKQovKioqKioqLyAJCQkJCQkJYWJvcnRFcnJvciA9IG5ldyBFcnJvcigKLyoqKioqKi8gCQkJCQkJCQkiQWJvcnRlZCBiZWNhdXNlICIgKyBtb2R1bGVJZCArICIgaXMgbm90IGFjY2VwdGVkIiArIGNoYWluSW5mbwovKioqKioqLyAJCQkJCQkJKTsKLyoqKioqKi8gCQkJCQkJYnJlYWs7Ci8qKioqKiovIAkJCQkJY2FzZSAiYWNjZXB0ZWQiOgovKioqKioqLyAJCQkJCQlpZiAob3B0aW9ucy5vbkFjY2VwdGVkKSBvcHRpb25zLm9uQWNjZXB0ZWQocmVzdWx0KTsKLyoqKioqKi8gCQkJCQkJZG9BcHBseSA9IHRydWU7Ci8qKioqKiovIAkJCQkJCWJyZWFrOwovKioqKioqLyAJCQkJCWNhc2UgImRpc3Bvc2VkIjoKLyoqKioqKi8gCQkJCQkJaWYgKG9wdGlvbnMub25EaXNwb3NlZCkgb3B0aW9ucy5vbkRpc3Bvc2VkKHJlc3VsdCk7Ci8qKioqKiovIAkJCQkJCWRvRGlzcG9zZSA9IHRydWU7Ci8qKioqKiovIAkJCQkJCWJyZWFrOwovKioqKioqLyAJCQkJCWRlZmF1bHQ6Ci8qKioqKiovIAkJCQkJCXRocm93IG5ldyBFcnJvcigiVW5leGNlcHRpb24gdHlwZSAiICsgcmVzdWx0LnR5cGUpOwovKioqKioqLyAJCQkJfQovKioqKioqLyAJCQkJaWYgKGFib3J0RXJyb3IpIHsKLyoqKioqKi8gCQkJCQlob3RTZXRTdGF0dXMoImFib3J0Iik7Ci8qKioqKiovIAkJCQkJcmV0dXJuIFByb21pc2UucmVqZWN0KGFib3J0RXJyb3IpOwovKioqKioqLyAJCQkJfQovKioqKioqLyAJCQkJaWYgKGRvQXBwbHkpIHsKLyoqKioqKi8gCQkJCQlhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IGhvdFVwZGF0ZVttb2R1bGVJZF07Ci8qKioqKiovIAkJCQkJYWRkQWxsVG9TZXQob3V0ZGF0ZWRNb2R1bGVzLCByZXN1bHQub3V0ZGF0ZWRNb2R1bGVzKTsKLyoqKioqKi8gCQkJCQlmb3IgKG1vZHVsZUlkIGluIHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcykgewovKioqKioqLyAJCQkJCQlpZiAoCi8qKioqKiovIAkJCQkJCQlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoCi8qKioqKiovIAkJCQkJCQkJcmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzLAovKioqKioqLyAJCQkJCQkJCW1vZHVsZUlkCi8qKioqKiovIAkJCQkJCQkpCi8qKioqKiovIAkJCQkJCSkgewovKioqKioqLyAJCQkJCQkJaWYgKCFvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pCi8qKioqKiovIAkJCQkJCQkJb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdID0gW107Ci8qKioqKiovIAkJCQkJCQlhZGRBbGxUb1NldCgKLyoqKioqKi8gCQkJCQkJCQlvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0sCi8qKioqKiovIAkJCQkJCQkJcmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXQovKioqKioqLyAJCQkJCQkJKTsKLyoqKioqKi8gCQkJCQkJfQovKioqKioqLyAJCQkJCX0KLyoqKioqKi8gCQkJCX0KLyoqKioqKi8gCQkJCWlmIChkb0Rpc3Bvc2UpIHsKLyoqKioqKi8gCQkJCQlhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIFtyZXN1bHQubW9kdWxlSWRdKTsKLyoqKioqKi8gCQkJCQlhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IHdhcm5VbmV4cGVjdGVkUmVxdWlyZTsKLyoqKioqKi8gCQkJCX0KLyoqKioqKi8gCQkJfQovKioqKioqLyAJCX0KLyoqKioqKi8KLyoqKioqKi8gCQkvLyBTdG9yZSBzZWxmIGFjY2VwdGVkIG91dGRhdGVkIG1vZHVsZXMgdG8gcmVxdWlyZSB0aGVtIGxhdGVyIGJ5IHRoZSBtb2R1bGUgc3lzdGVtCi8qKioqKiovIAkJdmFyIG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcyA9IFtdOwovKioqKioqLyAJCWZvciAoaSA9IDA7IGkgPCBvdXRkYXRlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHsKLyoqKioqKi8gCQkJbW9kdWxlSWQgPSBvdXRkYXRlZE1vZHVsZXNbaV07Ci8qKioqKiovIAkJCWlmICgKLyoqKioqKi8gCQkJCWluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdICYmCi8qKioqKiovIAkJCQlpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5ob3QuX3NlbGZBY2NlcHRlZCAmJgovKioqKioqLyAJCQkJLy8gcmVtb3ZlZCBzZWxmLWFjY2VwdGVkIG1vZHVsZXMgc2hvdWxkIG5vdCBiZSByZXF1aXJlZAovKioqKioqLyAJCQkJYXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gIT09IHdhcm5VbmV4cGVjdGVkUmVxdWlyZQovKioqKioqLyAJCQkpIHsKLyoqKioqKi8gCQkJCW91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5wdXNoKHsKLyoqKioqKi8gCQkJCQltb2R1bGU6IG1vZHVsZUlkLAovKioqKioqLyAJCQkJCWVycm9ySGFuZGxlcjogaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uaG90Ll9zZWxmQWNjZXB0ZWQKLyoqKioqKi8gCQkJCX0pOwovKioqKioqLyAJCQl9Ci8qKioqKiovIAkJfQovKioqKioqLwovKioqKioqLyAJCS8vIE5vdyBpbiAiZGlzcG9zZSIgcGhhc2UKLyoqKioqKi8gCQlob3RTZXRTdGF0dXMoImRpc3Bvc2UiKTsKLyoqKioqKi8gCQlPYmplY3Qua2V5cyhob3RBdmFpbGFibGVGaWxlc01hcCkuZm9yRWFjaChmdW5jdGlvbihjaHVua0lkKSB7Ci8qKioqKiovIAkJCWlmIChob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSA9PT0gZmFsc2UpIHsKLyoqKioqKi8gCQkJCWhvdERpc3Bvc2VDaHVuayhjaHVua0lkKTsKLyoqKioqKi8gCQkJfQovKioqKioqLyAJCX0pOwovKioqKioqLwovKioqKioqLyAJCXZhciBpZHg7Ci8qKioqKiovIAkJdmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLnNsaWNlKCk7Ci8qKioqKiovIAkJd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHsKLyoqKioqKi8gCQkJbW9kdWxlSWQgPSBxdWV1ZS5wb3AoKTsKLyoqKioqKi8gCQkJbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07Ci8qKioqKiovIAkJCWlmICghbW9kdWxlKSBjb250aW51ZTsKLyoqKioqKi8KLyoqKioqKi8gCQkJdmFyIGRhdGEgPSB7fTsKLyoqKioqKi8KLyoqKioqKi8gCQkJLy8gQ2FsbCBkaXNwb3NlIGhhbmRsZXJzCi8qKioqKiovIAkJCXZhciBkaXNwb3NlSGFuZGxlcnMgPSBtb2R1bGUuaG90Ll9kaXNwb3NlSGFuZGxlcnM7Ci8qKioqKiovIAkJCWZvciAoaiA9IDA7IGogPCBkaXNwb3NlSGFuZGxlcnMubGVuZ3RoOyBqKyspIHsKLyoqKioqKi8gCQkJCWNiID0gZGlzcG9zZUhhbmRsZXJzW2pdOwovKioqKioqLyAJCQkJY2IoZGF0YSk7Ci8qKioqKiovIAkJCX0KLyoqKioqKi8gCQkJaG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdID0gZGF0YTsKLyoqKioqKi8KLyoqKioqKi8gCQkJLy8gZGlzYWJsZSBtb2R1bGUgKHRoaXMgZGlzYWJsZXMgcmVxdWlyZXMgZnJvbSB0aGlzIG1vZHVsZSkKLyoqKioqKi8gCQkJbW9kdWxlLmhvdC5hY3RpdmUgPSBmYWxzZTsKLyoqKioqKi8KLyoqKioqKi8gCQkJLy8gcmVtb3ZlIG1vZHVsZSBmcm9tIGNhY2hlCi8qKioqKiovIAkJCWRlbGV0ZSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTsKLyoqKioqKi8KLyoqKioqKi8gCQkJLy8gd2hlbiBkaXNwb3NpbmcgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIGRpc3Bvc2UgaGFuZGxlcgovKioqKioqLyAJCQlkZWxldGUgb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdOwovKioqKioqLwovKioqKioqLyAJCQkvLyByZW1vdmUgInBhcmVudHMiIHJlZmVyZW5jZXMgZnJvbSBhbGwgY2hpbGRyZW4KLyoqKioqKi8gCQkJZm9yIChqID0gMDsgaiA8IG1vZHVsZS5jaGlsZHJlbi5sZW5ndGg7IGorKykgewovKioqKioqLyAJCQkJdmFyIGNoaWxkID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGUuY2hpbGRyZW5bal1dOwovKioqKioqLyAJCQkJaWYgKCFjaGlsZCkgY29udGludWU7Ci8qKioqKiovIAkJCQlpZHggPSBjaGlsZC5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpOwovKioqKioqLyAJCQkJaWYgKGlkeCA+PSAwKSB7Ci8qKioqKiovIAkJCQkJY2hpbGQucGFyZW50cy5zcGxpY2UoaWR4LCAxKTsKLyoqKioqKi8gCQkJCX0KLyoqKioqKi8gCQkJfQovKioqKioqLyAJCX0KLyoqKioqKi8KLyoqKioqKi8gCQkvLyByZW1vdmUgb3V0ZGF0ZWQgZGVwZW5kZW5jeSBmcm9tIG1vZHVsZSBjaGlsZHJlbgovKioqKioqLyAJCXZhciBkZXBlbmRlbmN5OwovKioqKioqLyAJCXZhciBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llczsKLyoqKioqKi8gCQlmb3IgKG1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7Ci8qKioqKiovIAkJCWlmICgKLyoqKioqKi8gCQkJCU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpCi8qKioqKiovIAkJCSkgewovKioqKioqLyAJCQkJbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07Ci8qKioqKiovIAkJCQlpZiAobW9kdWxlKSB7Ci8qKioqKiovIAkJCQkJbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07Ci8qKioqKiovIAkJCQkJZm9yIChqID0gMDsgaiA8IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzLmxlbmd0aDsgaisrKSB7Ci8qKioqKiovIAkJCQkJCWRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTsKLyoqKioqKi8gCQkJCQkJaWR4ID0gbW9kdWxlLmNoaWxkcmVuLmluZGV4T2YoZGVwZW5kZW5jeSk7Ci8qKioqKiovIAkJCQkJCWlmIChpZHggPj0gMCkgbW9kdWxlLmNoaWxkcmVuLnNwbGljZShpZHgsIDEpOwovKioqKioqLyAJCQkJCX0KLyoqKioqKi8gCQkJCX0KLyoqKioqKi8gCQkJfQovKioqKioqLyAJCX0KLyoqKioqKi8KLyoqKioqKi8gCQkvLyBOb3cgaW4gImFwcGx5IiBwaGFzZQovKioqKioqLyAJCWhvdFNldFN0YXR1cygiYXBwbHkiKTsKLyoqKioqKi8KLyoqKioqKi8gCQlob3RDdXJyZW50SGFzaCA9IGhvdFVwZGF0ZU5ld0hhc2g7Ci8qKioqKiovCi8qKioqKiovIAkJLy8gaW5zZXJ0IG5ldyBjb2RlCi8qKioqKiovIAkJZm9yIChtb2R1bGVJZCBpbiBhcHBsaWVkVXBkYXRlKSB7Ci8qKioqKiovIAkJCWlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXBwbGllZFVwZGF0ZSwgbW9kdWxlSWQpKSB7Ci8qKioqKiovIAkJCQltb2R1bGVzW21vZHVsZUlkXSA9IGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdOwovKioqKioqLyAJCQl9Ci8qKioqKiovIAkJfQovKioqKioqLwovKioqKioqLyAJCS8vIGNhbGwgYWNjZXB0IGhhbmRsZXJzCi8qKioqKiovIAkJdmFyIGVycm9yID0gbnVsbDsKLyoqKioqKi8gCQlmb3IgKG1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7Ci8qKioqKiovIAkJCWlmICgKLyoqKioqKi8gCQkJCU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpCi8qKioqKiovIAkJCSkgewovKioqKioqLyAJCQkJbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07Ci8qKioqKiovIAkJCQlpZiAobW9kdWxlKSB7Ci8qKioqKiovIAkJCQkJbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07Ci8qKioqKiovIAkJCQkJdmFyIGNhbGxiYWNrcyA9IFtdOwovKioqKioqLyAJCQkJCWZvciAoaSA9IDA7IGkgPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykgewovKioqKioqLyAJCQkJCQlkZXBlbmRlbmN5ID0gbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV07Ci8qKioqKiovIAkJCQkJCWNiID0gbW9kdWxlLmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwZW5kZW5jeV07Ci8qKioqKiovIAkJCQkJCWlmIChjYikgewovKioqKioqLyAJCQkJCQkJaWYgKGNhbGxiYWNrcy5pbmRleE9mKGNiKSAhPT0gLTEpIGNvbnRpbnVlOwovKioqKioqLyAJCQkJCQkJY2FsbGJhY2tzLnB1c2goY2IpOwovKioqKioqLyAJCQkJCQl9Ci8qKioqKiovIAkJCQkJfQovKioqKioqLyAJCQkJCWZvciAoaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHsKLyoqKioqKi8gCQkJCQkJY2IgPSBjYWxsYmFja3NbaV07Ci8qKioqKiovIAkJCQkJCXRyeSB7Ci8qKioqKiovIAkJCQkJCQljYihtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyk7Ci8qKioqKiovIAkJCQkJCX0gY2F0Y2ggKGVycikgewovKioqKioqLyAJCQkJCQkJaWYgKG9wdGlvbnMub25FcnJvcmVkKSB7Ci8qKioqKiovIAkJCQkJCQkJb3B0aW9ucy5vbkVycm9yZWQoewovKioqKioqLyAJCQkJCQkJCQl0eXBlOiAiYWNjZXB0LWVycm9yZWQiLAovKioqKioqLyAJCQkJCQkJCQltb2R1bGVJZDogbW9kdWxlSWQsCi8qKioqKiovIAkJCQkJCQkJCWRlcGVuZGVuY3lJZDogbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV0sCi8qKioqKiovIAkJCQkJCQkJCWVycm9yOiBlcnIKLyoqKioqKi8gCQkJCQkJCQl9KTsKLyoqKioqKi8gCQkJCQkJCX0KLyoqKioqKi8gCQkJCQkJCWlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7Ci8qKioqKiovIAkJCQkJCQkJaWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7Ci8qKioqKiovIAkJCQkJCQl9Ci8qKioqKiovIAkJCQkJCX0KLyoqKioqKi8gCQkJCQl9Ci8qKioqKiovIAkJCQl9Ci8qKioqKiovIAkJCX0KLyoqKioqKi8gCQl9Ci8qKioqKiovCi8qKioqKiovIAkJLy8gTG9hZCBzZWxmIGFjY2VwdGVkIG1vZHVsZXMKLyoqKioqKi8gCQlmb3IgKGkgPSAwOyBpIDwgb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7Ci8qKioqKiovIAkJCXZhciBpdGVtID0gb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzW2ldOwovKioqKioqLyAJCQltb2R1bGVJZCA9IGl0ZW0ubW9kdWxlOwovKioqKioqLyAJCQlob3RDdXJyZW50UGFyZW50cyA9IFttb2R1bGVJZF07Ci8qKioqKiovIAkJCXRyeSB7Ci8qKioqKiovIAkJCQlfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKTsKLyoqKioqKi8gCQkJfSBjYXRjaCAoZXJyKSB7Ci8qKioqKiovIAkJCQlpZiAodHlwZW9mIGl0ZW0uZXJyb3JIYW5kbGVyID09PSAiZnVuY3Rpb24iKSB7Ci8qKioqKiovIAkJCQkJdHJ5IHsKLyoqKioqKi8gCQkJCQkJaXRlbS5lcnJvckhhbmRsZXIoZXJyKTsKLyoqKioqKi8gCQkJCQl9IGNhdGNoIChlcnIyKSB7Ci8qKioqKiovIAkJCQkJCWlmIChvcHRpb25zLm9uRXJyb3JlZCkgewovKioqKioqLyAJCQkJCQkJb3B0aW9ucy5vbkVycm9yZWQoewovKioqKioqLyAJCQkJCQkJCXR5cGU6ICJzZWxmLWFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWQiLAovKioqKioqLyAJCQkJCQkJCW1vZHVsZUlkOiBtb2R1bGVJZCwKLyoqKioqKi8gCQkJCQkJCQllcnJvcjogZXJyMiwKLyoqKioqKi8gCQkJCQkJCQlvcmlnaW5hbEVycm9yOiBlcnIKLyoqKioqKi8gCQkJCQkJCX0pOwovKioqKioqLyAJCQkJCQl9Ci8qKioqKiovIAkJCQkJCWlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7Ci8qKioqKiovIAkJCQkJCQlpZiAoIWVycm9yKSBlcnJvciA9IGVycjI7Ci8qKioqKiovIAkJCQkJCX0KLyoqKioqKi8gCQkJCQkJaWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7Ci8qKioqKiovIAkJCQkJfQovKioqKioqLyAJCQkJfSBlbHNlIHsKLyoqKioqKi8gCQkJCQlpZiAob3B0aW9ucy5vbkVycm9yZWQpIHsKLyoqKioqKi8gCQkJCQkJb3B0aW9ucy5vbkVycm9yZWQoewovKioqKioqLyAJCQkJCQkJdHlwZTogInNlbGYtYWNjZXB0LWVycm9yZWQiLAovKioqKioqLyAJCQkJCQkJbW9kdWxlSWQ6IG1vZHVsZUlkLAovKioqKioqLyAJCQkJCQkJZXJyb3I6IGVycgovKioqKioqLyAJCQkJCQl9KTsKLyoqKioqKi8gCQkJCQl9Ci8qKioqKiovIAkJCQkJaWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHsKLyoqKioqKi8gCQkJCQkJaWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7Ci8qKioqKiovIAkJCQkJfQovKioqKioqLyAJCQkJfQovKioqKioqLyAJCQl9Ci8qKioqKiovIAkJfQovKioqKioqLwovKioqKioqLyAJCS8vIGhhbmRsZSBlcnJvcnMgaW4gYWNjZXB0IGhhbmRsZXJzIGFuZCBzZWxmIGFjY2VwdGVkIG1vZHVsZSBsb2FkCi8qKioqKiovIAkJaWYgKGVycm9yKSB7Ci8qKioqKiovIAkJCWhvdFNldFN0YXR1cygiZmFpbCIpOwovKioqKioqLyAJCQlyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpOwovKioqKioqLyAJCX0KLyoqKioqKi8KLyoqKioqKi8gCQlob3RTZXRTdGF0dXMoImlkbGUiKTsKLyoqKioqKi8gCQlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkgewovKioqKioqLyAJCQlyZXNvbHZlKG91dGRhdGVkTW9kdWxlcyk7Ci8qKioqKiovIAkJfSk7Ci8qKioqKiovIAl9Ci8qKioqKiovCi8qKioqKiovIAkvLyBUaGUgbW9kdWxlIGNhY2hlCi8qKioqKiovIAl2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9OwovKioqKioqLwovKioqKioqLyAJLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb24KLyoqKioqKi8gCWZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHsKLyoqKioqKi8KLyoqKioqKi8gCQkvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGUKLyoqKioqKi8gCQlpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkgewovKioqKioqLyAJCQlyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0czsKLyoqKioqKi8gCQl9Ci8qKioqKiovIAkJLy8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSkKLyoqKioqKi8gCQl2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7Ci8qKioqKiovIAkJCWk6IG1vZHVsZUlkLAovKioqKioqLyAJCQlsOiBmYWxzZSwKLyoqKioqKi8gCQkJZXhwb3J0czoge30sCi8qKioqKiovIAkJCWhvdDogaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSwKLyoqKioqKi8gCQkJcGFyZW50czogKGhvdEN1cnJlbnRQYXJlbnRzVGVtcCA9IGhvdEN1cnJlbnRQYXJlbnRzLCBob3RDdXJyZW50UGFyZW50cyA9IFtdLCBob3RDdXJyZW50UGFyZW50c1RlbXApLAovKioqKioqLyAJCQljaGlsZHJlbjogW10KLyoqKioqKi8gCQl9OwovKioqKioqLwovKioqKioqLyAJCS8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvbgovKioqKioqLyAJCW1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIGhvdENyZWF0ZVJlcXVpcmUobW9kdWxlSWQpKTsKLyoqKioqKi8KLyoqKioqKi8gCQkvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkCi8qKioqKiovIAkJbW9kdWxlLmwgPSB0cnVlOwovKioqKioqLwovKioqKioqLyAJCS8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlCi8qKioqKiovIAkJcmV0dXJuIG1vZHVsZS5leHBvcnRzOwovKioqKioqLyAJfQovKioqKioqLwovKioqKioqLwovKioqKioqLyAJLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXykKLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7Ci8qKioqKiovCi8qKioqKiovIAkvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZQovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlczsKLyoqKioqKi8KLyoqKioqKi8gCS8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0cwovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7Ci8qKioqKiovIAkJaWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkgewovKioqKioqLyAJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTsKLyoqKioqKi8gCQl9Ci8qKioqKiovIAl9OwovKioqKioqLwovKioqKioqLyAJLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0cwovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykgewovKioqKioqLyAJCWlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykgewovKioqKioqLyAJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTsKLyoqKioqKi8gCQl9Ci8qKioqKiovIAkJT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTsKLyoqKioqKi8gCX07Ci8qKioqKiovCi8qKioqKiovIAkvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3QKLyoqKioqKi8gCS8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdAovKioqKioqLyAJLy8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zCi8qKioqKiovIAkvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3QKLyoqKioqKi8gCS8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmUKLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7Ci8qKioqKiovIAkJaWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7Ci8qKioqKiovIAkJaWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTsKLyoqKioqKi8gCQlpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlOwovKioqKioqLyAJCXZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7Ci8qKioqKiovIAkJX193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTsKLyoqKioqKi8gCQlPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7Ci8qKioqKiovIAkJaWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpOwovKioqKioqLyAJCXJldHVybiBuczsKLyoqKioqKi8gCX07Ci8qKioqKiovCi8qKioqKiovIAkvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlcwovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7Ci8qKioqKiovIAkJdmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/Ci8qKioqKiovIAkJCWZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6Ci8qKioqKiovIAkJCWZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07Ci8qKioqKiovIAkJX193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpOwovKioqKioqLyAJCXJldHVybiBnZXR0ZXI7Ci8qKioqKiovIAl9OwovKioqKioqLwovKioqKioqLyAJLy8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07Ci8qKioqKiovCi8qKioqKiovIAkvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfXwovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gIi8iOwovKioqKioqLwovKioqKioqLyAJLy8gX193ZWJwYWNrX2hhc2hfXwovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5oID0gZnVuY3Rpb24oKSB7IHJldHVybiBob3RDdXJyZW50SGFzaDsgfTsKLyoqKioqKi8KLyoqKioqKi8KLyoqKioqKi8gCS8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0cwovKioqKioqLyAJcmV0dXJuIGhvdENyZWF0ZVJlcXVpcmUoMCkoX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7Ci8qKioqKiovIH0pCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKiovICh7CgovKioqLyAiLi8uY2FjaGUvYXBpLXJ1bm5lci1icm93c2VyLXBsdWdpbnMuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuLy5jYWNoZS9hcGktcnVubmVyLWJyb3dzZXItcGx1Z2lucy5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7Cgp2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9O21vZHVsZS5leHBvcnRzPVt7cGx1Z2luOl9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4tbWFuaWZlc3QvZ2F0c2J5LWJyb3dzZXIuanMgKi8gIi4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4tbWFuaWZlc3QvZ2F0c2J5LWJyb3dzZXIuanMiKSxvcHRpb25zOnsicGx1Z2lucyI6W10sIm5hbWUiOiJnYXRzYnktc3RhcnRlci1kZWZhdWx0Iiwic2hvcnRfbmFtZSI6InN0YXJ0ZXIiLCJzdGFydF91cmwiOiIvIiwiYmFja2dyb3VuZF9jb2xvciI6IiM2NjMzOTkiLCJ0aGVtZV9jb2xvciI6IiM2NjMzOTkiLCJkaXNwbGF5IjoibWluaW1hbC11aSIsImljb24iOiJzcmMvaW1hZ2VzL2dhdHNieS1pY29uLnBuZyJ9fSx7cGx1Z2luOl9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZ2F0c2J5LWJyb3dzZXIuanMgKi8gIi4vZ2F0c2J5LWJyb3dzZXIuanMiKSxvcHRpb25zOnsicGx1Z2lucyI6W119fV07CgovKioqLyB9KSwKCi8qKiovICIuLy5jYWNoZS9hcGktcnVubmVyLWJyb3dzZXIuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvYXBpLXJ1bm5lci1icm93c2VyLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnByb21pc2UuanMiKTtfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIpOyhmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9O3ZhciBwbHVnaW5zPV9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXBpLXJ1bm5lci1icm93c2VyLXBsdWdpbnMgKi8gIi4vLmNhY2hlL2FwaS1ydW5uZXItYnJvd3Nlci1wbHVnaW5zLmpzIik7dmFyIF9yZXF1aXJlJHB1YmxpY0xvYWRlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xvYWRlciAqLyAiLi8uY2FjaGUvbG9hZGVyLmpzIikucHVibGljTG9hZGVyLGdldFJlc291cmNlc0ZvclBhdGhuYW1lPV9yZXF1aXJlJHB1YmxpY0xvYWRlci5nZXRSZXNvdXJjZXNGb3JQYXRobmFtZSxnZXRSZXNvdXJjZXNGb3JQYXRobmFtZVN5bmM9X3JlcXVpcmUkcHVibGljTG9hZGVyLmdldFJlc291cmNlc0ZvclBhdGhuYW1lU3luYyxnZXRSZXNvdXJjZVVSTHNGb3JQYXRobmFtZT1fcmVxdWlyZSRwdWJsaWNMb2FkZXIuZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUsbG9hZFBhZ2U9X3JlcXVpcmUkcHVibGljTG9hZGVyLmxvYWRQYWdlLGxvYWRQYWdlU3luYz1fcmVxdWlyZSRwdWJsaWNMb2FkZXIubG9hZFBhZ2VTeW5jO2V4cG9ydHMuYXBpUnVubmVyPWZ1bmN0aW9uKGFwaSxhcmdzLGRlZmF1bHRSZXR1cm4sYXJnVHJhbnNmb3JtKXtpZihhcmdzPT09dm9pZCAwKXthcmdzPXt9O30vLyBIb29rcyBmb3IgZ2F0c2J5LWN5cHJlc3MncyBBUEkgaGFuZGxlcgppZih1bmRlZmluZWQpe2lmKHdpbmRvdy5fX19hcGlIYW5kbGVyKXt3aW5kb3cuX19fYXBpSGFuZGxlcihhcGkpO31lbHNlIGlmKHdpbmRvdy5fX19yZXNvbHZlZEFQSXMpe3dpbmRvdy5fX19yZXNvbHZlZEFQSXMucHVzaChhcGkpO31lbHNle3dpbmRvdy5fX19yZXNvbHZlZEFQSXM9W2FwaV07fX12YXIgcmVzdWx0cz1wbHVnaW5zLm1hcChmdW5jdGlvbihwbHVnaW4pe2lmKCFwbHVnaW4ucGx1Z2luW2FwaV0pe3JldHVybiB1bmRlZmluZWQ7fS8vIERlcHJlY2F0ZWQgQXByaWwgMjAxOS4gVXNlIGBsb2FkUGFnZVN5bmNgIGluc3RlYWQKYXJncy5nZXRSZXNvdXJjZXNGb3JQYXRobmFtZVN5bmM9Z2V0UmVzb3VyY2VzRm9yUGF0aG5hbWVTeW5jOy8vIERlcHJlY2F0ZWQgQXByaWwgMjAxOS4gVXNlIGBsb2FkUGFnZWAgaW5zdGVhZAphcmdzLmdldFJlc291cmNlc0ZvclBhdGhuYW1lPWdldFJlc291cmNlc0ZvclBhdGhuYW1lO2FyZ3MuZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWU9Z2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWU7YXJncy5sb2FkUGFnZT1sb2FkUGFnZTthcmdzLmxvYWRQYWdlU3luYz1sb2FkUGFnZVN5bmM7dmFyIHJlc3VsdD1wbHVnaW4ucGx1Z2luW2FwaV0oYXJncyxwbHVnaW4ub3B0aW9ucyk7aWYocmVzdWx0JiZhcmdUcmFuc2Zvcm0pe2FyZ3M9YXJnVHJhbnNmb3JtKHthcmdzOmFyZ3MscmVzdWx0OnJlc3VsdCxwbHVnaW46cGx1Z2lufSk7fXJldHVybiByZXN1bHQ7fSk7Ly8gRmlsdGVyIG91dCB1bmRlZmluZWQgcmVzdWx0cy4KcmVzdWx0cz1yZXN1bHRzLmZpbHRlcihmdW5jdGlvbihyZXN1bHQpe3JldHVybiB0eXBlb2YgcmVzdWx0IT09InVuZGVmaW5lZCI7fSk7aWYocmVzdWx0cy5sZW5ndGg+MCl7cmV0dXJuIHJlc3VsdHM7fWVsc2UgaWYoZGVmYXVsdFJldHVybil7cmV0dXJuW2RlZmF1bHRSZXR1cm5dO31lbHNle3JldHVybltdO319O2V4cG9ydHMuYXBpUnVubmVyQXN5bmM9ZnVuY3Rpb24oYXBpLGFyZ3MsZGVmYXVsdFJldHVybil7cmV0dXJuIHBsdWdpbnMucmVkdWNlKGZ1bmN0aW9uKHByZXZpb3VzLG5leHQpe3JldHVybiBuZXh0LnBsdWdpblthcGldP3ByZXZpb3VzLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbmV4dC5wbHVnaW5bYXBpXShhcmdzLG5leHQub3B0aW9ucyk7fSk6cHJldmlvdXM7fSxQcm9taXNlLnJlc29sdmUoKSk7fTs7KGZ1bmN0aW9uKCl7dmFyIHJlYWN0SG90TG9hZGVyPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQ6dW5kZWZpbmVkO2lmKCFyZWFjdEhvdExvYWRlcil7cmV0dXJuO31yZWFjdEhvdExvYWRlci5yZWdpc3RlcihnZXRSZXNvdXJjZXNGb3JQYXRobmFtZSwiZ2V0UmVzb3VyY2VzRm9yUGF0aG5hbWUiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2FwaS1ydW5uZXItYnJvd3Nlci5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKGdldFJlc291cmNlc0ZvclBhdGhuYW1lU3luYywiZ2V0UmVzb3VyY2VzRm9yUGF0aG5hbWVTeW5jIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9hcGktcnVubmVyLWJyb3dzZXIuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihnZXRSZXNvdXJjZVVSTHNGb3JQYXRobmFtZSwiZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2FwaS1ydW5uZXItYnJvd3Nlci5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKGxvYWRQYWdlLCJsb2FkUGFnZSIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvYXBpLXJ1bm5lci1icm93c2VyLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIobG9hZFBhZ2VTeW5jLCJsb2FkUGFnZVN5bmMiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2FwaS1ydW5uZXItYnJvd3Nlci5qcyIpO30pKCk7OyhmdW5jdGlvbigpe3ZhciBsZWF2ZU1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5sZWF2ZU1vZHVsZTp1bmRlZmluZWQ7bGVhdmVNb2R1bGUmJmxlYXZlTW9kdWxlKG1vZHVsZSk7fSkoKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMgKi8gIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMiKShtb2R1bGUpKSkKCi8qKiovIH0pLAoKLyoqKi8gIi4vLmNhY2hlL2FwcC5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuLy5jYWNoZS9hcHAuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIGV4cG9ydHMgcHJvdmlkZWQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9wcm9taXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2LnByb21pc2UgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9wcm9taXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9wcm9taXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl9kb21faXRlcmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl9kb21faXRlcmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfd2ViX2RvbV9pdGVyYWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfYXJyYXlfaXRlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfYXJyYXlfaXRlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X2FycmF5X2l0ZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfdG9fc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfdG9fc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfdG9fc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9zdHJpbmdfaXRlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9zdHJpbmdfaXRlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X3N0cmluZ19pdGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISByZWFjdCAqLyAiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0LWRvbSAqLyAiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWlrYWVsa3Jpc3RpYW5zc29uX2RvbXJlYWR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAbWlrYWVsa3Jpc3RpYW5zc29uL2RvbXJlYWR5ICovICIuL25vZGVfbW9kdWxlcy9AbWlrYWVsa3Jpc3RpYW5zc29uL2RvbXJlYWR5L3JlYWR5LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWlrYWVsa3Jpc3RpYW5zc29uX2RvbXJlYWR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX21pa2FlbGtyaXN0aWFuc3Nvbl9kb21yZWFkeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zb2NrZXRJb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zb2NrZXRJbyAqLyAiLi8uY2FjaGUvc29ja2V0SW8uanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lbWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VtaXR0ZXIgKi8gIi4vLmNhY2hlL2VtaXR0ZXIuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcGlfcnVubmVyX2Jyb3dzZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FwaS1ydW5uZXItYnJvd3NlciAqLyAiLi8uY2FjaGUvYXBpLXJ1bm5lci1icm93c2VyLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXBpX3J1bm5lcl9icm93c2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9hcGlfcnVubmVyX2Jyb3dzZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbG9hZGVyICovICIuLy5jYWNoZS9sb2FkZXIuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZXZfbG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZXYtbG9hZGVyICovICIuLy5jYWNoZS9kZXYtbG9hZGVyLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3luY19yZXF1aXJlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3luYy1yZXF1aXJlcyAqLyAiLi8uY2FjaGUvc3luYy1yZXF1aXJlcy5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N5bmNfcmVxdWlyZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3N5bmNfcmVxdWlyZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGNoX3BhdGhzX2pzb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGNoLXBhdGhzLmpzb24gKi8gIi4vLmNhY2hlL21hdGNoLXBhdGhzLmpzb24iKTsKdmFyIF9tYXRjaF9wYXRoc19qc29uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fX25hbWVzcGFjZSA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLnQoLyohIC4vbWF0Y2gtcGF0aHMuanNvbiAqLyAiLi8uY2FjaGUvbWF0Y2gtcGF0aHMuanNvbiIsIDEpOwp2YXIgX2pzeEZpbGVOYW1lPSIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2FwcC5qcyI7KGZ1bmN0aW9uKCl7dmFyIGVudGVyTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmVudGVyTW9kdWxlOnVuZGVmaW5lZDtlbnRlck1vZHVsZSYmZW50ZXJNb2R1bGUobW9kdWxlKTt9KSgpO3ZhciBfX3NpZ25hdHVyZV9fPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQuc2lnbmF0dXJlOmZ1bmN0aW9uKGEpe3JldHVybiBhO307Ly8gR2VuZXJhdGVkIGR1cmluZyBib290c3RyYXAKd2luZG93Ll9fX2VtaXR0ZXI9X2VtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siZGVmYXVsdCJdO3ZhciBsb2FkZXI9bmV3IF9kZXZfbG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJkZWZhdWx0Il0oX3N5bmNfcmVxdWlyZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19fZGVmYXVsdC5hLF9tYXRjaF9wYXRoc19qc29uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fKTtPYmplY3QoX2xvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1sic2V0TG9hZGVyIl0pKGxvYWRlcik7bG9hZGVyLnNldEFwaVJ1bm5lcihfYXBpX3J1bm5lcl9icm93c2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJhcGlSdW5uZXIiXSk7d2luZG93Ll9fX2xvYWRlcj1fbG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJwdWJsaWNMb2FkZXIiXTsvLyBMZXQgdGhlIHNpdGUvcGx1Z2lucyBydW4gY29kZSB2ZXJ5IGVhcmx5LgpPYmplY3QoX2FwaV9ydW5uZXJfYnJvd3Nlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siYXBpUnVubmVyQXN5bmMiXSkoIm9uQ2xpZW50RW50cnkiKS50aGVuKGZ1bmN0aW9uKCl7Ly8gSG9vayB1cCB0aGUgY2xpZW50IHRvIHNvY2tldC5pbyBvbiBzZXJ2ZXIKdmFyIHNvY2tldD1PYmplY3QoX3NvY2tldElvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bImRlZmF1bHQiXSkoKTtpZihzb2NrZXQpe3NvY2tldC5vbigicmVsb2FkIixmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTt9KTt9LyoqCiAgICogU2VydmljZSBXb3JrZXJzIGFyZSBwZXJzaXN0ZW50IGJ5IG5hdHVyZS4gVGhleSBzdGljayBhcm91bmQsCiAgICogc2VydmluZyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzaXRlIGlmIHRoZXkgYXJlbid0IHJlbW92ZWQuCiAgICogVGhpcyBpcyBlc3BlY2lhbGx5IGZydXN0cmF0aW5nIHdoZW4geW91IG5lZWQgdG8gdGVzdCB0aGUKICAgKiBwcm9kdWN0aW9uIGJ1aWxkIG9uIHlvdXIgbG9jYWwgbWFjaGluZS4KICAgKgogICAqIExldCdzIHdhcm4gaWYgd2UgZmluZCBzZXJ2aWNlIHdvcmtlcnMgaW4gZGV2ZWxvcG1lbnQuCiAgICovaWYoInNlcnZpY2VXb3JrZXIiaW4gbmF2aWdhdG9yKXtuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5nZXRSZWdpc3RyYXRpb25zKCkudGhlbihmdW5jdGlvbihyZWdpc3RyYXRpb25zKXtpZihyZWdpc3RyYXRpb25zLmxlbmd0aD4wKWNvbnNvbGUud2FybigiV2FybmluZzogZm91bmQgb25lIG9yIG1vcmUgc2VydmljZSB3b3JrZXJzIHByZXNlbnQuIiwiSWYgeW91ciBzaXRlIGlzbid0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCB5b3UgbWlnaHQgd2FudCB0byByZW1vdmUgdGhlc2UuIixyZWdpc3RyYXRpb25zKTt9KTt9dmFyIHJvb3RFbGVtZW50PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX19nYXRzYnkiKTt2YXIgcmVuZGVyZXI9T2JqZWN0KF9hcGlfcnVubmVyX2Jyb3dzZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bImFwaVJ1bm5lciJdKSgicmVwbGFjZUh5ZHJhdGVGdW5jdGlvbiIsdW5kZWZpbmVkLHJlYWN0X2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fX2RlZmF1bHQuYS5yZW5kZXIpWzBdO1Byb21pc2UuYWxsKFtsb2FkZXIubG9hZFBhZ2UoIi9kZXYtNDA0LXBhZ2UvIiksbG9hZGVyLmxvYWRQYWdlKCIvNDA0Lmh0bWwiKSxsb2FkZXIubG9hZFBhZ2Uod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKV0pLnRoZW4oZnVuY3Rpb24oKXt2YXIgcHJlZmVyRGVmYXVsdD1mdW5jdGlvbiBwcmVmZXJEZWZhdWx0KG0pe3JldHVybiBtJiZtLmRlZmF1bHR8fG07fTt2YXIgUm9vdD1wcmVmZXJEZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcm9vdCAqLyAiLi8uY2FjaGUvcm9vdC5qcyIpKTtfbWlrYWVsa3Jpc3RpYW5zc29uX2RvbXJlYWR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19fZGVmYXVsdCgpKGZ1bmN0aW9uKCl7cmVuZGVyZXIocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChSb290LHtfX3NvdXJjZTp7ZmlsZU5hbWU6X2pzeEZpbGVOYW1lLGxpbmVOdW1iZXI6Njd9LF9fc2VsZjp0aGlzfSkscm9vdEVsZW1lbnQsZnVuY3Rpb24oKXtPYmplY3QoX2FwaV9ydW5uZXJfYnJvd3Nlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siYXBpUnVubmVyIl0pKCJvbkluaXRpYWxDbGllbnRSZW5kZXIiKTt9KTt9KTt9KTt9KTs7KGZ1bmN0aW9uKCl7dmFyIHJlYWN0SG90TG9hZGVyPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQ6dW5kZWZpbmVkO2lmKCFyZWFjdEhvdExvYWRlcil7cmV0dXJuO31yZWFjdEhvdExvYWRlci5yZWdpc3Rlcihsb2FkZXIsImxvYWRlciIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvYXBwLmpzIik7fSkoKTs7KGZ1bmN0aW9uKCl7dmFyIGxlYXZlTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmxlYXZlTW9kdWxlOnVuZGVmaW5lZDtsZWF2ZU1vZHVsZSYmbGVhdmVNb2R1bGUobW9kdWxlKTt9KSgpOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzICovICIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiKShtb2R1bGUpKSkKCi8qKiovIH0pLAoKLyoqKi8gIi4vLmNhY2hlL2NyZWF0ZS1yZWFjdC1jb250ZXh0LmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvY3JlYXRlLXJlYWN0LWNvbnRleHQuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pOwooZnVuY3Rpb24oKXt2YXIgZW50ZXJNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZW50ZXJNb2R1bGU6dW5kZWZpbmVkO2VudGVyTW9kdWxlJiZlbnRlck1vZHVsZShtb2R1bGUpO30pKCk7dmFyIF9fc2lnbmF0dXJlX189dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdC5zaWduYXR1cmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE7fTt2YXIgX2RlZmF1bHQ9cmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlQ29udGV4dDsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bImRlZmF1bHQiXSA9IChfZGVmYXVsdCk7OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoX2RlZmF1bHQsImRlZmF1bHQiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2NyZWF0ZS1yZWFjdC1jb250ZXh0LmpzIik7fSkoKTs7KGZ1bmN0aW9uKCl7dmFyIGxlYXZlTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmxlYXZlTW9kdWxlOnVuZGVmaW5lZDtsZWF2ZU1vZHVsZSYmbGVhdmVNb2R1bGUobW9kdWxlKTt9KSgpOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzICovICIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiKShtb2R1bGUpKSkKCi8qKiovIH0pLAoKLyoqKi8gIi4vLmNhY2hlL2Rldi00MDQtcGFnZS5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuLy5jYWNoZS9kZXYtNDA0LXBhZ2UuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIHBhZ2VzUXVlcnkgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwYWdlc1F1ZXJ5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBwYWdlc1F1ZXJ5OyB9KTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfcmVnZXhwX2NvbnN0cnVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3RvciAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfcmVnZXhwX2NvbnN0cnVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9yZWdleHBfY29uc3RydWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2VzbV90b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkgKi8gIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2VzbV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCAqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2VzbV9pbmhlcml0c0xvb3NlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlICovICIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcHJvcC10eXBlcyAqLyAiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBnYXRzYnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGdhdHNieSAqLyAiLi8uY2FjaGUvZ2F0c2J5LWJyb3dzZXItZW50cnkuanMiKTsKdmFyIF9qc3hGaWxlTmFtZT0iL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9kZXYtNDA0LXBhZ2UuanMiOyhmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9O3ZhciBEZXY0MDRQYWdlPS8qI19fUFVSRV9fKi9mdW5jdGlvbihfUmVhY3QkQ29tcG9uZW50KXtPYmplY3QoX2JhYmVsX3J1bnRpbWVfaGVscGVyc19lc21faW5oZXJpdHNMb29zZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJkZWZhdWx0Il0pKERldjQwNFBhZ2UsX1JlYWN0JENvbXBvbmVudCk7ZnVuY3Rpb24gRGV2NDA0UGFnZShwcm9wcyl7dmFyIF90aGlzO190aGlzPV9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLHByb3BzKXx8dGhpczt2YXIgZGF0YT1fdGhpcy5wcm9wcy5kYXRhO3ZhciBwYWdlUGF0aHM9ZGF0YS5hbGxTaXRlUGFnZS5ub2Rlcy5tYXAoZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUucGF0aDt9KTtfdGhpcy5zdGF0ZT17c2hvd0N1c3RvbTQwNDpmYWxzZSxpbml0UGFnZVBhdGhzOnBhZ2VQYXRocyxwYWdlUGF0aHM6cGFnZVBhdGhzLHBhZ2VQYXRoU2VhcmNoVGVybXM6IiJ9O190aGlzLnNob3dDdXN0b200MDQ9X3RoaXMuc2hvd0N1c3RvbTQwNC5iaW5kKE9iamVjdChfYmFiZWxfcnVudGltZV9oZWxwZXJzX2VzbV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siZGVmYXVsdCJdKShfdGhpcykpO190aGlzLmhhbmRsZVBhZ2VQYXRoU2VhcmNoPV90aGlzLmhhbmRsZVBhZ2VQYXRoU2VhcmNoLmJpbmQoT2JqZWN0KF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXNtX2Fzc2VydFRoaXNJbml0aWFsaXplZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJkZWZhdWx0Il0pKF90aGlzKSk7X3RoaXMuaGFuZGxlU2VhcmNoVGVybUNoYW5nZT1fdGhpcy5oYW5kbGVTZWFyY2hUZXJtQ2hhbmdlLmJpbmQoT2JqZWN0KF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXNtX2Fzc2VydFRoaXNJbml0aWFsaXplZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJkZWZhdWx0Il0pKF90aGlzKSk7cmV0dXJuIF90aGlzO312YXIgX3Byb3RvPURldjQwNFBhZ2UucHJvdG90eXBlO19wcm90by5zaG93Q3VzdG9tNDA0PWZ1bmN0aW9uIHNob3dDdXN0b200MDQoKXt0aGlzLnNldFN0YXRlKHtzaG93Q3VzdG9tNDA0OnRydWV9KTt9O19wcm90by5oYW5kbGVTZWFyY2hUZXJtQ2hhbmdlPWZ1bmN0aW9uIGhhbmRsZVNlYXJjaFRlcm1DaGFuZ2UoZXZlbnQpe3RoaXMuc2V0U3RhdGUoe3BhZ2VQYXRoU2VhcmNoVGVybXM6ZXZlbnQudGFyZ2V0LnZhbHVlfSk7fTtfcHJvdG8uaGFuZGxlUGFnZVBhdGhTZWFyY2g9ZnVuY3Rpb24gaGFuZGxlUGFnZVBhdGhTZWFyY2goZXZlbnQpe2V2ZW50LnByZXZlbnREZWZhdWx0KCk7dmFyIHRlbXBQYWdlUGF0aHM9T2JqZWN0KF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXNtX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImRlZmF1bHQiXSkodGhpcy5zdGF0ZS5pbml0UGFnZVBhdGhzKTt2YXIgc2VhcmNoVGVybT1uZXcgUmVnRXhwKCIiK3RoaXMuc3RhdGUucGFnZVBhdGhTZWFyY2hUZXJtcyk7dGhpcy5zZXRTdGF0ZSh7cGFnZVBhdGhzOnRlbXBQYWdlUGF0aHMuZmlsdGVyKGZ1bmN0aW9uKHBhZ2VQYXRoKXtyZXR1cm4gc2VhcmNoVGVybS50ZXN0KHBhZ2VQYXRoKTt9KX0pO307X3Byb3RvLnJlbmRlcj1mdW5jdGlvbiByZW5kZXIoKXt2YXIgcGF0aG5hbWU9dGhpcy5wcm9wcy5sb2NhdGlvbi5wYXRobmFtZTt2YXIgbmV3RmlsZVBhdGg7aWYocGF0aG5hbWU9PT0iLyIpe25ld0ZpbGVQYXRoPSJzcmMvcGFnZXMvaW5kZXguanMiO31lbHNlIGlmKHBhdGhuYW1lLnNsaWNlKC0xKT09PSIvIil7bmV3RmlsZVBhdGg9InNyYy9wYWdlcyIrcGF0aG5hbWUuc2xpY2UoMCwtMSkrIi5qcyI7fWVsc2V7bmV3RmlsZVBhdGg9InNyYy9wYWdlcyIrcGF0aG5hbWUrIi5qcyI7fXJldHVybiB0aGlzLnN0YXRlLnNob3dDdXN0b200MDQ/dGhpcy5wcm9wcy5jdXN0b200MDQ6cmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7X19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjYwfSxfX3NlbGY6dGhpc30scmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgiaDEiLHtfX3NvdXJjZTp7ZmlsZU5hbWU6X2pzeEZpbGVOYW1lLGxpbmVOdW1iZXI6NjF9LF9fc2VsZjp0aGlzfSwiR2F0c2J5LmpzIGRldmVsb3BtZW50IDQwNCBwYWdlIikscmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgicCIse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo2Mn0sX19zZWxmOnRoaXN9LCJUaGVyZSdzIG5vdCBhIHBhZ2UgeWV0IGF0ICIscmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgiY29kZSIse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo2NH0sX19zZWxmOnRoaXN9LHBhdGhuYW1lKSksdGhpcy5wcm9wcy5jdXN0b200MDQ/cmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgicCIse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo2N30sX19zZWxmOnRoaXN9LHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse29uQ2xpY2s6dGhpcy5zaG93Q3VzdG9tNDA0LF9fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo2OH0sX19zZWxmOnRoaXN9LCJQcmV2aWV3IGN1c3RvbSA0MDQgcGFnZSIpKTpyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KCJwIix7X19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjczfSxfX3NlbGY6dGhpc30sIkEgY3VzdG9tIDQwNCBwYWdlIHdhc24ndCBkZXRlY3RlZCAtIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGFkZCBvbmUsIGNyZWF0ZSBhIGNvbXBvbmVudCBpbiB5b3VyIHNpdGUgZGlyZWN0b3J5IGF0ICIscmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgiY29kZSIse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo3NX0sX19zZWxmOnRoaXN9LCJzcmMvcGFnZXMvNDA0LmpzIiksIi4iKSxyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KCJwIix7X19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjc4fSxfX3NlbGY6dGhpc30sIkNyZWF0ZSBhIFJlYWN0LmpzIGNvbXBvbmVudCBpbiB5b3VyIHNpdGUgZGlyZWN0b3J5IGF0IiwiICIscmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgiY29kZSIse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo4MX0sX19zZWxmOnRoaXN9LG5ld0ZpbGVQYXRoKSwiICIsImFuZCB0aGlzIHBhZ2Ugd2lsbCBhdXRvbWF0aWNhbGx5IHJlZnJlc2ggdG8gc2hvdyB0aGUgbmV3IHBhZ2UgY29tcG9uZW50IHlvdSBjcmVhdGVkLiIpLHRoaXMuc3RhdGUuaW5pdFBhZ2VQYXRocy5sZW5ndGg+MCYmcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7X19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjg3fSxfX3NlbGY6dGhpc30scmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgicCIse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo4OH0sX19zZWxmOnRoaXN9LCJJZiB5b3Ugd2VyZSB0cnlpbmcgdG8gcmVhY2ggYW5vdGhlciBwYWdlLCBwZXJoYXBzIHlvdSBjYW4gZmluZCBpdCBiZWxvdy4iKSxyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KCJoMiIse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo5Mn0sX19zZWxmOnRoaXN9LCJQYWdlcyAoIix0aGlzLnN0YXRlLnBhZ2VQYXRocy5sZW5ndGghPXRoaXMuc3RhdGUuaW5pdFBhZ2VQYXRocy5sZW5ndGg/dGhpcy5zdGF0ZS5wYWdlUGF0aHMubGVuZ3RoKyIvIit0aGlzLnN0YXRlLmluaXRQYWdlUGF0aHMubGVuZ3RoOnRoaXMuc3RhdGUuaW5pdFBhZ2VQYXRocy5sZW5ndGgsIikiKSxyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KCJmb3JtIix7b25TdWJtaXQ6dGhpcy5oYW5kbGVQYWdlUGF0aFNlYXJjaCxfX3NvdXJjZTp7ZmlsZU5hbWU6X2pzeEZpbGVOYW1lLGxpbmVOdW1iZXI6MTAwfSxfX3NlbGY6dGhpc30scmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgibGFiZWwiLHtfX3NvdXJjZTp7ZmlsZU5hbWU6X2pzeEZpbGVOYW1lLGxpbmVOdW1iZXI6MTAxfSxfX3NlbGY6dGhpc30sIlNlYXJjaDoiLHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7dHlwZToidGV4dCIsaWQ6InNlYXJjaCIscGxhY2Vob2xkZXI6IlNlYXJjaCBwYWdlcy4uLiIsdmFsdWU6dGhpcy5zdGF0ZS5wYWdlU2VhcmNoVGVybSxvbkNoYW5nZTp0aGlzLmhhbmRsZVNlYXJjaFRlcm1DaGFuZ2UsX19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjEwM30sX19zZWxmOnRoaXN9KSkscmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHt0eXBlOiJzdWJtaXQiLHZhbHVlOiJTdWJtaXQiLF9fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjoxMTF9LF9fc2VsZjp0aGlzfSkpLHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoInVsIix7X19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjExM30sX19zZWxmOnRoaXN9LHRoaXMuc3RhdGUucGFnZVBhdGhzLm1hcChmdW5jdGlvbihwYWdlUGF0aCxpbmRleCl7cmV0dXJuIGluZGV4PDEwMCYmcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgibGkiLHtrZXk6cGFnZVBhdGgsX19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjExN30sX19zZWxmOnRoaXN9LHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoZ2F0c2J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkxpbmsiXSx7dG86cGFnZVBhdGgsX19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjExOH0sX19zZWxmOnRoaXN9LHBhZ2VQYXRoKSk7fSksdGhpcy5zdGF0ZS5wYWdlUGF0aHMubGVuZ3RoPjEwMCYmcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgicCIse3N0eWxlOntmb250V2VpZ2h0OiJib2xkIn0sX19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjEyM30sX19zZWxmOnRoaXN9LCIuLi4gYW5kICIsdGhpcy5zdGF0ZS5wYWdlUGF0aHMubGVuZ3RoLTEwMCwiIG1vcmUuIikpKSk7fTsvLyBAdHMtaWdub3JlCl9wcm90by5fX3JlYWN0c3RhbmRpbl9fcmVnZW5lcmF0ZUJ5RXZhbD1mdW5jdGlvbiBfX3JlYWN0c3RhbmRpbl9fcmVnZW5lcmF0ZUJ5RXZhbChrZXksY29kZSl7Ly8gQHRzLWlnbm9yZQp0aGlzW2tleV09ZXZhbChjb2RlKTt9O3JldHVybiBEZXY0MDRQYWdlO30ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0LmEuQ29tcG9uZW50KTtEZXY0MDRQYWdlLnByb3BUeXBlcz17ZGF0YTpwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19fZGVmYXVsdC5hLm9iamVjdCxjdXN0b200MDQ6cHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fX2RlZmF1bHQuYS5lbGVtZW50LGxvY2F0aW9uOnByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX19kZWZhdWx0LmEub2JqZWN0fTt2YXIgX2RlZmF1bHQ9RGV2NDA0UGFnZTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bImRlZmF1bHQiXSA9IChfZGVmYXVsdCk7dmFyIHBhZ2VzUXVlcnk9IjIzNjM1MzUwODUiOzsoZnVuY3Rpb24oKXt2YXIgcmVhY3RIb3RMb2FkZXI9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdDp1bmRlZmluZWQ7aWYoIXJlYWN0SG90TG9hZGVyKXtyZXR1cm47fXJlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKERldjQwNFBhZ2UsIkRldjQwNFBhZ2UiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2Rldi00MDQtcGFnZS5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKHBhZ2VzUXVlcnksInBhZ2VzUXVlcnkiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2Rldi00MDQtcGFnZS5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKF9kZWZhdWx0LCJkZWZhdWx0IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9kZXYtNDA0LXBhZ2UuanMiKTt9KSgpOzsoZnVuY3Rpb24oKXt2YXIgbGVhdmVNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwubGVhdmVNb2R1bGU6dW5kZWZpbmVkO2xlYXZlTW9kdWxlJiZsZWF2ZU1vZHVsZShtb2R1bGUpO30pKCk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbCh0aGlzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLy4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMgKi8gIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIpKG1vZHVsZSkpKQoKLyoqKi8gfSksCgovKioqLyAiLi8uY2FjaGUvZGV2LWxvYWRlci5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvZGV2LWxvYWRlci5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfYXNzaWduX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24gKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfYXNzaWduX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfYXNzaWduX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9wcm9taXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2LnByb21pc2UgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9wcm9taXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9wcm9taXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfdG9fc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfdG9fc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfdG9fc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19lc21faW5oZXJpdHNMb29zZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSAqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2FkZXIgKi8gIi4vLmNhY2hlL2xvYWRlci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZpbmRfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9maW5kLXBhdGggKi8gIi4vLmNhY2hlL2ZpbmQtcGF0aC5qcyIpOwooZnVuY3Rpb24oKXt2YXIgZW50ZXJNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZW50ZXJNb2R1bGU6dW5kZWZpbmVkO2VudGVyTW9kdWxlJiZlbnRlck1vZHVsZShtb2R1bGUpO30pKCk7dmFyIF9fc2lnbmF0dXJlX189dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdC5zaWduYXR1cmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE7fTt2YXIgRGV2TG9hZGVyPS8qI19fUFVSRV9fKi9mdW5jdGlvbihfQmFzZUxvYWRlcil7T2JqZWN0KF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXNtX2luaGVyaXRzTG9vc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siZGVmYXVsdCJdKShEZXZMb2FkZXIsX0Jhc2VMb2FkZXIpO2Z1bmN0aW9uIERldkxvYWRlcihzeW5jUmVxdWlyZXMsbWF0Y2hQYXRocyl7dmFyIGxvYWRDb21wb25lbnQ9ZnVuY3Rpb24gbG9hZENvbXBvbmVudChjaHVua05hbWUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoc3luY1JlcXVpcmVzLmNvbXBvbmVudHNbY2h1bmtOYW1lXSk7fTtyZXR1cm4gX0Jhc2VMb2FkZXIuY2FsbCh0aGlzLGxvYWRDb21wb25lbnQsbWF0Y2hQYXRocyl8fHRoaXM7fXZhciBfcHJvdG89RGV2TG9hZGVyLnByb3RvdHlwZTtfcHJvdG8ubG9hZFBhZ2U9ZnVuY3Rpb24gbG9hZFBhZ2UocGFnZVBhdGgpe3ZhciByZWFsUGF0aD1PYmplY3QoX2ZpbmRfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJmaW5kUGF0aCJdKShwYWdlUGF0aCk7cmV0dXJuIF9CYXNlTG9hZGVyLnByb3RvdHlwZS5sb2FkUGFnZS5jYWxsKHRoaXMscmVhbFBhdGgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zb2NrZXRJbyAqLyAiLi8uY2FjaGUvc29ja2V0SW8uanMiKS5nZXRQYWdlRGF0YShyZWFsUGF0aCkudGhlbihmdW5jdGlvbigpe3JldHVybiByZXN1bHQ7fSk7fSk7fTtfcHJvdG8ubG9hZFBhZ2VEYXRhSnNvbj1mdW5jdGlvbiBsb2FkUGFnZURhdGFKc29uKHJhd1BhdGgpe3ZhciBfdGhpcz10aGlzO3JldHVybiBfQmFzZUxvYWRlci5wcm90b3R5cGUubG9hZFBhZ2VEYXRhSnNvbi5jYWxsKHRoaXMscmF3UGF0aCkudGhlbihmdW5jdGlvbihkYXRhKXsvLyB3aGVuIHdlIGNhbid0IGZpbmQgYSBwcm9wZXIgNDA0Lmh0bWwgd2UgZmFsbGJhY2sgdG8gZGV2LTQwNC1wYWdlCi8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIG1hcmsgaXQgYXMgbm90IGZvdW5kLgppZihkYXRhLnN0YXR1cz09PSJmYWlsdXJlIil7cmV0dXJuIF90aGlzLmxvYWRQYWdlRGF0YUpzb24oIi9kZXYtNDA0LXBhZ2UvIikudGhlbihmdW5jdGlvbihyZXN1bHQpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGRhdGEscmVzdWx0KTt9KTt9cmV0dXJuIGRhdGE7fSk7fTtfcHJvdG8uZG9QcmVmZXRjaD1mdW5jdGlvbiBkb1ByZWZldGNoKHBhZ2VQYXRoKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc29ja2V0SW8gKi8gIi4vLmNhY2hlL3NvY2tldElvLmpzIikuZ2V0UGFnZURhdGEocGFnZVBhdGgpKTt9Oy8vIEB0cy1pZ25vcmUKX3Byb3RvLl9fcmVhY3RzdGFuZGluX19yZWdlbmVyYXRlQnlFdmFsPWZ1bmN0aW9uIF9fcmVhY3RzdGFuZGluX19yZWdlbmVyYXRlQnlFdmFsKGtleSxjb2RlKXsvLyBAdHMtaWdub3JlCnRoaXNba2V5XT1ldmFsKGNvZGUpO307cmV0dXJuIERldkxvYWRlcjt9KF9sb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQmFzZUxvYWRlciJdKTt2YXIgX2RlZmF1bHQ9RGV2TG9hZGVyOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gKF9kZWZhdWx0KTs7KGZ1bmN0aW9uKCl7dmFyIHJlYWN0SG90TG9hZGVyPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQ6dW5kZWZpbmVkO2lmKCFyZWFjdEhvdExvYWRlcil7cmV0dXJuO31yZWFjdEhvdExvYWRlci5yZWdpc3RlcihEZXZMb2FkZXIsIkRldkxvYWRlciIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvZGV2LWxvYWRlci5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKF9kZWZhdWx0LCJkZWZhdWx0IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9kZXYtbG9hZGVyLmpzIik7fSkoKTs7KGZ1bmN0aW9uKCl7dmFyIGxlYXZlTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmxlYXZlTW9kdWxlOnVuZGVmaW5lZDtsZWF2ZU1vZHVsZSYmbGVhdmVNb2R1bGUobW9kdWxlKTt9KSgpOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzICovICIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiKShtb2R1bGUpKSkKCi8qKiovIH0pLAoKLyoqKi8gIi4vLmNhY2hlL2VtaXR0ZXIuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vLmNhY2hlL2VtaXR0ZXIuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIG1pdHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIG1pdHQgKi8gIi4vbm9kZV9tb2R1bGVzL21pdHQvZGlzdC9taXR0LmVzLmpzIik7CihmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9O3ZhciBlbWl0dGVyPU9iamVjdChtaXR0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImRlZmF1bHQiXSkoKTt2YXIgX2RlZmF1bHQ9ZW1pdHRlcjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bImRlZmF1bHQiXSA9IChfZGVmYXVsdCk7OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoZW1pdHRlciwiZW1pdHRlciIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvZW1pdHRlci5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKF9kZWZhdWx0LCJkZWZhdWx0IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9lbWl0dGVyLmpzIik7fSkoKTs7KGZ1bmN0aW9uKCl7dmFyIGxlYXZlTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmxlYXZlTW9kdWxlOnVuZGVmaW5lZDtsZWF2ZU1vZHVsZSYmbGVhdmVNb2R1bGUobW9kdWxlKTt9KSgpOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzICovICIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiKShtb2R1bGUpKSkKCi8qKiovIH0pLAoKLyoqKi8gIi4vLmNhY2hlL2Vuc3VyZS1yZXNvdXJjZXMuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vLmNhY2hlL2Vuc3VyZS1yZXNvdXJjZXMuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfb2JqZWN0X2Fzc2lnbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfb2JqZWN0X2Fzc2lnbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczZfb2JqZWN0X2Fzc2lnbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXNtX2luaGVyaXRzTG9vc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UgKi8gIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISByZWFjdCAqLyAiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xvYWRlciAqLyAiLi8uY2FjaGUvbG9hZGVyLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzaGFsbG93X2NvbXBhcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHNoYWxsb3ctY29tcGFyZSAqLyAiLi9ub2RlX21vZHVsZXMvc2hhbGxvdy1jb21wYXJlL2VzL2luZGV4LmpzIik7CihmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9O3ZhciBFbnN1cmVSZXNvdXJjZXM9LyojX19QVVJFX18qL2Z1bmN0aW9uKF9SZWFjdCRDb21wb25lbnQpe09iamVjdChfYmFiZWxfcnVudGltZV9oZWxwZXJzX2VzbV9pbmhlcml0c0xvb3NlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImRlZmF1bHQiXSkoRW5zdXJlUmVzb3VyY2VzLF9SZWFjdCRDb21wb25lbnQpO2Z1bmN0aW9uIEVuc3VyZVJlc291cmNlcyhwcm9wcyl7dmFyIF90aGlzO190aGlzPV9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzKXx8dGhpczt2YXIgbG9jYXRpb249cHJvcHMubG9jYXRpb24scGFnZVJlc291cmNlcz1wcm9wcy5wYWdlUmVzb3VyY2VzO190aGlzLnN0YXRlPXtsb2NhdGlvbjpPYmplY3QuYXNzaWduKHt9LGxvY2F0aW9uKSxwYWdlUmVzb3VyY2VzOnBhZ2VSZXNvdXJjZXN8fF9sb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siZGVmYXVsdCJdLmxvYWRQYWdlU3luYyhsb2NhdGlvbi5wYXRobmFtZSl9O3JldHVybiBfdGhpczt9RW5zdXJlUmVzb3VyY2VzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz1mdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoX3JlZixwcmV2U3RhdGUpe3ZhciBsb2NhdGlvbj1fcmVmLmxvY2F0aW9uO2lmKHByZXZTdGF0ZS5sb2NhdGlvbi5ocmVmIT09bG9jYXRpb24uaHJlZil7dmFyIHBhZ2VSZXNvdXJjZXM9X2xvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJkZWZhdWx0Il0ubG9hZFBhZ2VTeW5jKGxvY2F0aW9uLnBhdGhuYW1lKTtyZXR1cm57cGFnZVJlc291cmNlczpwYWdlUmVzb3VyY2VzLGxvY2F0aW9uOk9iamVjdC5hc3NpZ24oe30sbG9jYXRpb24pfTt9cmV0dXJue2xvY2F0aW9uOk9iamVjdC5hc3NpZ24oe30sbG9jYXRpb24pfTt9O3ZhciBfcHJvdG89RW5zdXJlUmVzb3VyY2VzLnByb3RvdHlwZTtfcHJvdG8ubG9hZFJlc291cmNlcz1mdW5jdGlvbiBsb2FkUmVzb3VyY2VzKHJhd1BhdGgpe3ZhciBfdGhpczI9dGhpcztfbG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bImRlZmF1bHQiXS5sb2FkUGFnZShyYXdQYXRoKS50aGVuKGZ1bmN0aW9uKHBhZ2VSZXNvdXJjZXMpe2lmKHBhZ2VSZXNvdXJjZXMmJnBhZ2VSZXNvdXJjZXMuc3RhdHVzIT09ImVycm9yIil7X3RoaXMyLnNldFN0YXRlKHtsb2NhdGlvbjpPYmplY3QuYXNzaWduKHt9LHdpbmRvdy5sb2NhdGlvbikscGFnZVJlc291cmNlczpwYWdlUmVzb3VyY2VzfSk7fWVsc2V7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCIiLGxvY2F0aW9uLmhyZWYpO3dpbmRvdy5sb2NhdGlvbj1yYXdQYXRoO319KTt9O19wcm90by5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcyxuZXh0U3RhdGUpey8vIEFsd2F5cyByZXR1cm4gZmFsc2UgaWYgd2UncmUgbWlzc2luZyByZXNvdXJjZXMuCmlmKCFuZXh0U3RhdGUucGFnZVJlc291cmNlcyl7dGhpcy5sb2FkUmVzb3VyY2VzKG5leHRQcm9wcy5sb2NhdGlvbi5wYXRobmFtZSk7cmV0dXJuIGZhbHNlO30vLyBDaGVjayBpZiB0aGUgY29tcG9uZW50IG9yIGpzb24gaGF2ZSBjaGFuZ2VkLgppZih0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMhPT1uZXh0U3RhdGUucGFnZVJlc291cmNlcyl7cmV0dXJuIHRydWU7fWlmKHRoaXMuc3RhdGUucGFnZVJlc291cmNlcy5jb21wb25lbnQhPT1uZXh0U3RhdGUucGFnZVJlc291cmNlcy5jb21wb25lbnQpe3JldHVybiB0cnVlO31pZih0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMuanNvbiE9PW5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzLmpzb24pe3JldHVybiB0cnVlO30vLyBDaGVjayBpZiBsb2NhdGlvbiBoYXMgY2hhbmdlZCBvbiBhIHBhZ2UgdXNpbmcgaW50ZXJuYWwgcm91dGluZwovLyB2aWEgbWF0Y2hQYXRoIGNvbmZpZ3VyYXRpb24uCmlmKHRoaXMuc3RhdGUubG9jYXRpb24ua2V5IT09bmV4dFN0YXRlLmxvY2F0aW9uLmtleSYmbmV4dFN0YXRlLnBhZ2VSZXNvdXJjZXMucGFnZSYmKG5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzLnBhZ2UubWF0Y2hQYXRofHxuZXh0U3RhdGUucGFnZVJlc291cmNlcy5wYWdlLnBhdGgpKXtyZXR1cm4gdHJ1ZTt9cmV0dXJuIE9iamVjdChzaGFsbG93X2NvbXBhcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siZGVmYXVsdCJdKSh0aGlzLG5leHRQcm9wcyxuZXh0U3RhdGUpO307X3Byb3RvLnJlbmRlcj1mdW5jdGlvbiByZW5kZXIoKXtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbih0aGlzLnN0YXRlKTt9Oy8vIEB0cy1pZ25vcmUKX3Byb3RvLl9fcmVhY3RzdGFuZGluX19yZWdlbmVyYXRlQnlFdmFsPWZ1bmN0aW9uIF9fcmVhY3RzdGFuZGluX19yZWdlbmVyYXRlQnlFdmFsKGtleSxjb2RlKXsvLyBAdHMtaWdub3JlCnRoaXNba2V5XT1ldmFsKGNvZGUpO307cmV0dXJuIEVuc3VyZVJlc291cmNlczt9KHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLkNvbXBvbmVudCk7dmFyIF9kZWZhdWx0PUVuc3VyZVJlc291cmNlczsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bImRlZmF1bHQiXSA9IChfZGVmYXVsdCk7OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoRW5zdXJlUmVzb3VyY2VzLCJFbnN1cmVSZXNvdXJjZXMiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2Vuc3VyZS1yZXNvdXJjZXMuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihfZGVmYXVsdCwiZGVmYXVsdCIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvZW5zdXJlLXJlc291cmNlcy5qcyIpO30pKCk7OyhmdW5jdGlvbigpe3ZhciBsZWF2ZU1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5sZWF2ZU1vZHVsZTp1bmRlZmluZWQ7bGVhdmVNb2R1bGUmJmxlYXZlTW9kdWxlKG1vZHVsZSk7fSkoKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyAqLyAiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIikobW9kdWxlKSkpCgovKioqLyB9KSwKCi8qKiovICIuLy5jYWNoZS9lcnJvci1vdmVybGF5LWhhbmRsZXIuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvZXJyb3Itb3ZlcmxheS1oYW5kbGVyLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBjbGVhckVycm9yLCByZXBvcnRFcnJvciwgZXJyb3JNYXAgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjbGVhckVycm9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhckVycm9yOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicmVwb3J0RXJyb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcG9ydEVycm9yOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZXJyb3JNYXAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGVycm9yTWFwOyB9KTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc193ZWJfZG9tX2l0ZXJhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZSAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc193ZWJfZG9tX2l0ZXJhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX3dlYl9kb21faXRlcmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X2FycmF5X2l0ZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X2FycmF5X2l0ZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9hcnJheV9pdGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfb2JqZWN0X3RvX3N0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfb2JqZWN0X3RvX3N0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczZfb2JqZWN0X3RvX3N0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczdfb2JqZWN0X3ZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczdfb2JqZWN0X3ZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczdfb2JqZWN0X3ZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXNtX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheSAqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X2Vycm9yX292ZXJsYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0LWVycm9yLW92ZXJsYXkgKi8gIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWVycm9yLW92ZXJsYXkvbGliL2luZGV4LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9lcnJvcl9vdmVybGF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfZXJyb3Jfb3ZlcmxheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fKTsKKGZ1bmN0aW9uKCl7dmFyIGVudGVyTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmVudGVyTW9kdWxlOnVuZGVmaW5lZDtlbnRlck1vZHVsZSYmZW50ZXJNb2R1bGUobW9kdWxlKTt9KSgpO3ZhciBfX3NpZ25hdHVyZV9fPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQuc2lnbmF0dXJlOmZ1bmN0aW9uKGEpe3JldHVybiBhO307Ly8gUmVwb3J0IHJ1bnRpbWUgZXJyb3JzCnJlYWN0X2Vycm9yX292ZXJsYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1sic3RhcnRSZXBvcnRpbmdSdW50aW1lRXJyb3JzIl0oe29uRXJyb3I6ZnVuY3Rpb24gb25FcnJvcigpe30sZmlsZW5hbWU6Ii9jb21tb25zLmpzIn0pO3JlYWN0X2Vycm9yX292ZXJsYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1sic2V0RWRpdG9ySGFuZGxlciJdKGZ1bmN0aW9uKGVycm9yTG9jYXRpb24pe3JldHVybiB3aW5kb3cuZmV0Y2goIi9fX29wZW4tc3RhY2stZnJhbWUtaW4tZWRpdG9yP2ZpbGVOYW1lPSIrd2luZG93LmVuY29kZVVSSUNvbXBvbmVudChlcnJvckxvY2F0aW9uLmZpbGVOYW1lKSsiJmxpbmVOdW1iZXI9Iit3aW5kb3cuZW5jb2RlVVJJQ29tcG9uZW50KGVycm9yTG9jYXRpb24ubGluZU51bWJlcnx8MSkpO30pO3ZhciBlcnJvck1hcD17fTtmdW5jdGlvbiBmbGF0KGFycil7dmFyIF9yZWY7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mbGF0P2Fyci5mbGF0KCk6KF9yZWY9W10pLmNvbmNhdC5hcHBseShfcmVmLE9iamVjdChfYmFiZWxfcnVudGltZV9oZWxwZXJzX2VzbV90b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJkZWZhdWx0Il0pKGFycikpO312YXIgaGFuZGxlRXJyb3JPdmVybGF5PWZ1bmN0aW9uIGhhbmRsZUVycm9yT3ZlcmxheSgpe3ZhciBlcnJvcnM9T2JqZWN0LnZhbHVlcyhlcnJvck1hcCk7dmFyIGVycm9yU3RyaW5nc1RvRGlzcGxheT1bXTtpZihlcnJvcnMubGVuZ3RoPjApe2Vycm9yU3RyaW5nc1RvRGlzcGxheT1mbGF0KGVycm9ycykubWFwKGZ1bmN0aW9uKGVycm9yKXtpZih0eXBlb2YgZXJyb3I9PT0ic3RyaW5nIil7cmV0dXJuIGVycm9yO31lbHNlIGlmKHR5cGVvZiBlcnJvcj09PSJvYmplY3QiKXt2YXIgZXJyb3JTdHJCdWlsZGVyPVtlcnJvci50ZXh0XTtpZihlcnJvci5maWxlUGF0aCl7ZXJyb3JTdHJCdWlsZGVyLnB1c2goIkZpbGU6ICIrZXJyb3IuZmlsZVBhdGgpO31yZXR1cm4gZXJyb3JTdHJCdWlsZGVyLmpvaW4oIlxuXG4iKTt9cmV0dXJuIG51bGw7fSkuZmlsdGVyKEJvb2xlYW4pO31pZihlcnJvclN0cmluZ3NUb0Rpc3BsYXkubGVuZ3RoPjApe3JlYWN0X2Vycm9yX292ZXJsYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1sicmVwb3J0QnVpbGRFcnJvciJdKGVycm9yU3RyaW5nc1RvRGlzcGxheS5qb2luKCJcblxuIikpO31lbHNle3JlYWN0X2Vycm9yX292ZXJsYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siZGlzbWlzc0J1aWxkRXJyb3IiXSgpO319O3ZhciBjbGVhckVycm9yPWZ1bmN0aW9uIGNsZWFyRXJyb3IoZXJyb3JJRCl7ZGVsZXRlIGVycm9yTWFwW2Vycm9ySURdO2hhbmRsZUVycm9yT3ZlcmxheSgpO307dmFyIHJlcG9ydEVycm9yPWZ1bmN0aW9uIHJlcG9ydEVycm9yKGVycm9ySUQsZXJyb3Ipe2lmKGVycm9yKXtlcnJvck1hcFtlcnJvcklEXT1lcnJvcjt9aGFuZGxlRXJyb3JPdmVybGF5KCk7fTs7KGZ1bmN0aW9uKCl7dmFyIHJlYWN0SG90TG9hZGVyPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQ6dW5kZWZpbmVkO2lmKCFyZWFjdEhvdExvYWRlcil7cmV0dXJuO31yZWFjdEhvdExvYWRlci5yZWdpc3RlcihlcnJvck1hcCwiZXJyb3JNYXAiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2Vycm9yLW92ZXJsYXktaGFuZGxlci5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKGZsYXQsImZsYXQiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2Vycm9yLW92ZXJsYXktaGFuZGxlci5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKGhhbmRsZUVycm9yT3ZlcmxheSwiaGFuZGxlRXJyb3JPdmVybGF5IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9lcnJvci1vdmVybGF5LWhhbmRsZXIuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihjbGVhckVycm9yLCJjbGVhckVycm9yIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9lcnJvci1vdmVybGF5LWhhbmRsZXIuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihyZXBvcnRFcnJvciwicmVwb3J0RXJyb3IiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2Vycm9yLW92ZXJsYXktaGFuZGxlci5qcyIpO30pKCk7OyhmdW5jdGlvbigpe3ZhciBsZWF2ZU1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5sZWF2ZU1vZHVsZTp1bmRlZmluZWQ7bGVhdmVNb2R1bGUmJmxlYXZlTW9kdWxlKG1vZHVsZSk7fSkoKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyAqLyAiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIikobW9kdWxlKSkpCgovKioqLyB9KSwKCi8qKiovICIuLy5jYWNoZS9maW5kLXBhdGguanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvZmluZC1wYXRoLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBzZXRNYXRjaFBhdGhzLCBmaW5kTWF0Y2hQYXRoLCBmaW5kUGF0aCwgY2xlYW5QYXRoICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2V0TWF0Y2hQYXRocyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0TWF0Y2hQYXRoczsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZpbmRNYXRjaFBhdGgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpbmRNYXRjaFBhdGg7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJmaW5kUGF0aCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZmluZFBhdGg7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjbGVhblBhdGgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFuUGF0aDsgfSk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM3X3N5bWJvbF9hc3luY19pdGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM3X3N5bWJvbF9hc3luY19pdGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczdfc3ltYm9sX2FzeW5jX2l0ZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9zeW1ib2xfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9zeW1ib2xfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X3N5bWJvbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfcmVnZXhwX3NwbGl0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfcmVnZXhwX3NwbGl0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9yZWdleHBfc3BsaXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfd2ViX2RvbV9pdGVyYWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfd2ViX2RvbV9pdGVyYWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc193ZWJfZG9tX2l0ZXJhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9hcnJheV9pdGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvciAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9hcnJheV9pdGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczZfYXJyYXlfaXRlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF90b19zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZyAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF90b19zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF90b19zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X3N0cmluZ19pdGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X3N0cmluZ19pdGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczZfc3RyaW5nX2l0ZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9tYXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYubWFwICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hcC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9tYXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X21hcF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yZWFjaF9yb3V0ZXJfbGliX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAcmVhY2gvcm91dGVyL2xpYi91dGlscyAqLyAiLi9ub2RlX21vZHVsZXMvQHJlYWNoL3JvdXRlci9lcy9saWIvdXRpbHMuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdHJpcF9wcmVmaXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3RyaXAtcHJlZml4ICovICIuLy5jYWNoZS9zdHJpcC1wcmVmaXguanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub3JtYWxpemVfcGFnZV9wYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub3JtYWxpemUtcGFnZS1wYXRoICovICIuLy5jYWNoZS9ub3JtYWxpemUtcGFnZS1wYXRoLmpzIik7CihmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9O3ZhciBwYXRoQ2FjaGU9bmV3IE1hcCgpO3ZhciBtYXRjaFBhdGhzPVtdO3ZhciB0cmltUGF0aG5hbWU9ZnVuY3Rpb24gdHJpbVBhdGhuYW1lKHJhd1BhdGhuYW1lKXt2YXIgcGF0aG5hbWU9ZGVjb2RlVVJJQ29tcG9uZW50KHJhd1BhdGhuYW1lKTsvLyBSZW1vdmUgdGhlIHBhdGhQcmVmaXggZnJvbSB0aGUgcGF0aG5hbWUuCnZhciB0cmltbWVkUGF0aG5hbWU9T2JqZWN0KF9zdHJpcF9wcmVmaXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siZGVmYXVsdCJdKShwYXRobmFtZSwiIikvLyBSZW1vdmUgYW55IGhhc2hmcmFnbWVudAouc3BsaXQoIiMiKVswXS8vIFJlbW92ZSBzZWFyY2ggcXVlcnkKLnNwbGl0KCI/IilbMF07cmV0dXJuIHRyaW1tZWRQYXRobmFtZTt9Oy8qKgogKiBTZXQgbGlzdCBvZiBtYXRjaFBhdGhzCiAqCiAqIEBwYXJhbSB7QXJyYXk8e3BhdGg6IHN0cmluZywgbWF0Y2hQYXRoOiBzdHJpbmd9Pn0gdmFsdWUgY29sbGVjdGlvbiBvZiBtYXRjaFBhdGhzCiAqL3ZhciBzZXRNYXRjaFBhdGhzPWZ1bmN0aW9uIHNldE1hdGNoUGF0aHModmFsdWUpe21hdGNoUGF0aHM9dmFsdWU7fTsvKioKICogUmV0dXJuIGEgbWF0Y2hwYXRoIHVybAogKiBpZiBgbWF0Y2gtcGF0aHMuanNvbmAgY29udGFpbnMgYHsgIi9mb28qIjogIi9wYWdlMSIsIC4uLn1gLCB0aGVuCiAqIGAvZm9vP2Jhcj1mYXJgID0+IGAvcGFnZTFgCiAqCiAqIEBwYXJhbSB7c3RyaW5nfSByYXdQYXRobmFtZSBBIHJhdyBwYXRobmFtZQogKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0KICovdmFyIGZpbmRNYXRjaFBhdGg9ZnVuY3Rpb24gZmluZE1hdGNoUGF0aChyYXdQYXRobmFtZSl7dmFyIHRyaW1tZWRQYXRobmFtZT1jbGVhblBhdGgocmF3UGF0aG5hbWUpO2Zvcih2YXIgX2l0ZXJhdG9yPW1hdGNoUGF0aHMsX2lzQXJyYXk9QXJyYXkuaXNBcnJheShfaXRlcmF0b3IpLF9pPTAsX2l0ZXJhdG9yPV9pc0FycmF5P19pdGVyYXRvcjpfaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSgpOzspe3ZhciBfcmVmO2lmKF9pc0FycmF5KXtpZihfaT49X2l0ZXJhdG9yLmxlbmd0aClicmVhaztfcmVmPV9pdGVyYXRvcltfaSsrXTt9ZWxzZXtfaT1faXRlcmF0b3IubmV4dCgpO2lmKF9pLmRvbmUpYnJlYWs7X3JlZj1faS52YWx1ZTt9dmFyIF9yZWYyPV9yZWYsbWF0Y2hQYXRoPV9yZWYyLm1hdGNoUGF0aCxwYXRoPV9yZWYyLnBhdGg7aWYoT2JqZWN0KF9yZWFjaF9yb3V0ZXJfbGliX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIm1hdGNoIl0pKG1hdGNoUGF0aCx0cmltbWVkUGF0aG5hbWUpKXtyZXR1cm4gT2JqZWN0KF9ub3JtYWxpemVfcGFnZV9wYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJkZWZhdWx0Il0pKHBhdGgpO319cmV0dXJuIG51bGw7fTsvLyBHaXZlbiBhIHJhdyBVUkwgcGF0aCwgcmV0dXJucyB0aGUgY2xlYW5lZCB2ZXJzaW9uIG9mIGl0ICh0cmltIG9mZgovLyBgI2AgYW5kIHF1ZXJ5IHBhcmFtcyksIG9yIGlmIGl0IG1hdGNoZXMgYW4gZW50cnkgaW4KLy8gYG1hdGNoLXBhdGhzLmpzb25gLCBpdHMgbWF0Y2hlZCBwYXRoIGlzIHJldHVybmVkCi8vCi8vIEUuZyBgL2Zvbz9iYXI9ZmFyYCA9PiBgL2Zvb2AKLy8KLy8gT3IgaWYgYG1hdGNoLXBhdGhzLmpzb25gIGNvbnRhaW5zIGB7ICIvZm9vKiI6ICIvcGFnZTEiLCAuLi59YCwgdGhlbgovLyBgL2Zvbz9iYXI9ZmFyYCA9PiBgL3BhZ2UxYAp2YXIgZmluZFBhdGg9ZnVuY3Rpb24gZmluZFBhdGgocmF3UGF0aG5hbWUpe3ZhciB0cmltbWVkUGF0aG5hbWU9dHJpbVBhdGhuYW1lKHJhd1BhdGhuYW1lKTtpZihwYXRoQ2FjaGUuaGFzKHRyaW1tZWRQYXRobmFtZSkpe3JldHVybiBwYXRoQ2FjaGUuZ2V0KHRyaW1tZWRQYXRobmFtZSk7fXZhciBmb3VuZFBhdGg9ZmluZE1hdGNoUGF0aCh0cmltbWVkUGF0aG5hbWUpO2lmKCFmb3VuZFBhdGgpe2ZvdW5kUGF0aD1jbGVhblBhdGgocmF3UGF0aG5hbWUpO31wYXRoQ2FjaGUuc2V0KHRyaW1tZWRQYXRobmFtZSxmb3VuZFBhdGgpO3JldHVybiBmb3VuZFBhdGg7fTsvKioKICogQ2xlYW4gYSB1cmwgYW5kIGNvbnZlcnRzIC9pbmRleC5odG1sID0+IC8KICogRS5nIGAvZm9vP2Jhcj1mYXJgID0+IGAvZm9vYAogKgogKiBAcGFyYW0ge3N0cmluZ30gcmF3UGF0aG5hbWUgQSByYXcgcGF0aG5hbWUKICogQHJldHVybiB7c3RyaW5nfQogKi92YXIgY2xlYW5QYXRoPWZ1bmN0aW9uIGNsZWFuUGF0aChyYXdQYXRobmFtZSl7dmFyIHRyaW1tZWRQYXRobmFtZT10cmltUGF0aG5hbWUocmF3UGF0aG5hbWUpO3ZhciBmb3VuZFBhdGg9dHJpbW1lZFBhdGhuYW1lO2lmKGZvdW5kUGF0aD09PSIvaW5kZXguaHRtbCIpe2ZvdW5kUGF0aD0iLyI7fWZvdW5kUGF0aD1PYmplY3QoX25vcm1hbGl6ZV9wYWdlX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bImRlZmF1bHQiXSkoZm91bmRQYXRoKTtyZXR1cm4gZm91bmRQYXRoO307OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIocGF0aENhY2hlLCJwYXRoQ2FjaGUiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2ZpbmQtcGF0aC5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKG1hdGNoUGF0aHMsIm1hdGNoUGF0aHMiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2ZpbmQtcGF0aC5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKHRyaW1QYXRobmFtZSwidHJpbVBhdGhuYW1lIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9maW5kLXBhdGguanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihzZXRNYXRjaFBhdGhzLCJzZXRNYXRjaFBhdGhzIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9maW5kLXBhdGguanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihmaW5kTWF0Y2hQYXRoLCJmaW5kTWF0Y2hQYXRoIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9maW5kLXBhdGguanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihmaW5kUGF0aCwiZmluZFBhdGgiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2ZpbmQtcGF0aC5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKGNsZWFuUGF0aCwiY2xlYW5QYXRoIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9maW5kLXBhdGguanMiKTt9KSgpOzsoZnVuY3Rpb24oKXt2YXIgbGVhdmVNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwubGVhdmVNb2R1bGU6dW5kZWZpbmVkO2xlYXZlTW9kdWxlJiZsZWF2ZU1vZHVsZShtb2R1bGUpO30pKCk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbCh0aGlzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLy4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMgKi8gIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIpKG1vZHVsZSkpKQoKLyoqKi8gfSksCgovKioqLyAiLi8uY2FjaGUvZ2F0c2J5LWJyb3dzZXItZW50cnkuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuLy5jYWNoZS9nYXRzYnktYnJvd3Nlci1lbnRyeS5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBMaW5rLCB3aXRoQXNzZXRQcmVmaXgsIHdpdGhQcmVmaXgsIGdyYXBocWwsIHBhcnNlUGF0aCwgbmF2aWdhdGUsIHB1c2gsIHJlcGxhY2UsIG5hdmlnYXRlVG8sIFN0YXRpY1F1ZXJ5Q29udGV4dCwgU3RhdGljUXVlcnksIFBhZ2VSZW5kZXJlciwgdXNlU3RhdGljUXVlcnksIHByZWZldGNoUGF0aG5hbWUgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJncmFwaHFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBncmFwaHFsOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RhdGljUXVlcnlDb250ZXh0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdGF0aWNRdWVyeUNvbnRleHQ7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGF0aWNRdWVyeSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3RhdGljUXVlcnk7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJ1c2VTdGF0aWNRdWVyeSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdXNlU3RhdGljUXVlcnk7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwcmVmZXRjaFBhdGhuYW1lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwcmVmZXRjaFBhdGhuYW1lOyB9KTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISByZWFjdCAqLyAiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBwcm9wLXR5cGVzICovICIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGdhdHNieV9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBnYXRzYnktbGluayAqLyAiLi9ub2RlX21vZHVsZXMvZ2F0c2J5LWxpbmsvaW5kZXguanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGdhdHNieV9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZ2F0c2J5X2xpbmtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7Ci8qIGhhcm1vbnkgcmVleHBvcnQgKGRlZmF1bHQgZnJvbSBub24taGFybW9ueSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaW5rIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnYXRzYnlfbGlua19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYTsgfSk7Ci8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAid2l0aEFzc2V0UHJlZml4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBnYXRzYnlfbGlua19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ3aXRoQXNzZXRQcmVmaXgiXTsgfSk7CgovKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIndpdGhQcmVmaXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdhdHNieV9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIndpdGhQcmVmaXgiXTsgfSk7CgovKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInBhcnNlUGF0aCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2F0c2J5X2xpbmtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sicGFyc2VQYXRoIl07IH0pOwoKLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJuYXZpZ2F0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2F0c2J5X2xpbmtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sibmF2aWdhdGUiXTsgfSk7CgovKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInB1c2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdhdHNieV9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInB1c2giXTsgfSk7CgovKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInJlcGxhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdhdHNieV9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInJlcGxhY2UiXTsgfSk7CgovKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIm5hdmlnYXRlVG8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdhdHNieV9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIm5hdmlnYXRlVG8iXTsgfSk7CgovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3B1YmxpY19wYWdlX3JlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3B1YmxpYy1wYWdlLXJlbmRlcmVyICovICIuLy5jYWNoZS9wdWJsaWMtcGFnZS1yZW5kZXJlci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3B1YmxpY19wYWdlX3JlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3B1YmxpY19wYWdlX3JlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18pOwovKiBoYXJtb255IHJlZXhwb3J0IChkZWZhdWx0IGZyb20gbm9uLWhhcm1vbnkpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFnZVJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcHVibGljX3BhZ2VfcmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0LmE7IH0pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2FkZXIgKi8gIi4vLmNhY2hlL2xvYWRlci5qcyIpOwp2YXIgX2pzeEZpbGVOYW1lPSIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2dhdHNieS1icm93c2VyLWVudHJ5LmpzIjsoZnVuY3Rpb24oKXt2YXIgZW50ZXJNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZW50ZXJNb2R1bGU6dW5kZWZpbmVkO2VudGVyTW9kdWxlJiZlbnRlck1vZHVsZShtb2R1bGUpO30pKCk7dmFyIF9fc2lnbmF0dXJlX189dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdC5zaWduYXR1cmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE7fTt2YXIgcHJlZmV0Y2hQYXRobmFtZT1fbG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bImRlZmF1bHQiXS5lbnF1ZXVlO3ZhciBTdGF0aWNRdWVyeUNvbnRleHQ9cmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlQ29udGV4dCh7fSk7ZnVuY3Rpb24gU3RhdGljUXVlcnlEYXRhUmVuZGVyZXIoX3JlZil7dmFyIHN0YXRpY1F1ZXJ5RGF0YT1fcmVmLnN0YXRpY1F1ZXJ5RGF0YSxkYXRhPV9yZWYuZGF0YSxxdWVyeT1fcmVmLnF1ZXJ5LHJlbmRlcj1fcmVmLnJlbmRlcjt2YXIgZmluYWxEYXRhPWRhdGE/ZGF0YS5kYXRhOnN0YXRpY1F1ZXJ5RGF0YVtxdWVyeV0mJnN0YXRpY1F1ZXJ5RGF0YVtxdWVyeV0uZGF0YTtyZXR1cm4gcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5GcmFnbWVudCx7X19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjI1fSxfX3NlbGY6dGhpc30sZmluYWxEYXRhJiZyZW5kZXIoZmluYWxEYXRhKSwhZmluYWxEYXRhJiZyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtfX3NvdXJjZTp7ZmlsZU5hbWU6X2pzeEZpbGVOYW1lLGxpbmVOdW1iZXI6Mjd9LF9fc2VsZjp0aGlzfSwiTG9hZGluZyAoU3RhdGljUXVlcnkpIikpO312YXIgU3RhdGljUXVlcnk9ZnVuY3Rpb24gU3RhdGljUXVlcnkocHJvcHMpe3ZhciBkYXRhPXByb3BzLmRhdGEscXVlcnk9cHJvcHMucXVlcnkscmVuZGVyPXByb3BzLnJlbmRlcixjaGlsZHJlbj1wcm9wcy5jaGlsZHJlbjtyZXR1cm4gcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdGF0aWNRdWVyeUNvbnRleHQuQ29uc3VtZXIse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjozNn0sX19zZWxmOnRoaXN9LGZ1bmN0aW9uKHN0YXRpY1F1ZXJ5RGF0YSl7cmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3RhdGljUXVlcnlEYXRhUmVuZGVyZXIse2RhdGE6ZGF0YSxxdWVyeTpxdWVyeSxyZW5kZXI6cmVuZGVyfHxjaGlsZHJlbixzdGF0aWNRdWVyeURhdGE6c3RhdGljUXVlcnlEYXRhLF9fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjozOH0sX19zZWxmOnRoaXN9KTt9KTt9O3ZhciB1c2VTdGF0aWNRdWVyeT1mdW5jdGlvbiB1c2VTdGF0aWNRdWVyeShxdWVyeSl7aWYodHlwZW9mIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLnVzZUNvbnRleHQhPT0iZnVuY3Rpb24iJiYiZGV2ZWxvcG1lbnQiPT09ImRldmVsb3BtZW50Iil7dGhyb3cgbmV3IEVycm9yKCJZb3UncmUgbGlrZWx5IHVzaW5nIGEgdmVyc2lvbiBvZiBSZWFjdCB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBIb29rc1xuIisiUGxlYXNlIHVwZGF0ZSBSZWFjdCBhbmQgUmVhY3RET00gdG8gMTYuOC4wIG9yIGxhdGVyIHRvIHVzZSB0aGUgdXNlU3RhdGljUXVlcnkgaG9vay4iKTt9dmFyIGNvbnRleHQ9cmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEudXNlQ29udGV4dChTdGF0aWNRdWVyeUNvbnRleHQpO2lmKGNvbnRleHRbcXVlcnldJiZjb250ZXh0W3F1ZXJ5XS5kYXRhKXtyZXR1cm4gY29udGV4dFtxdWVyeV0uZGF0YTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIlRoZSByZXN1bHQgb2YgdGhpcyBTdGF0aWNRdWVyeSBjb3VsZCBub3QgYmUgZmV0Y2hlZC5cblxuIisiVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gR2F0c2J5IGFuZCBpZiByZWZyZXNoaW5nIHRoZSBwYWdlIGRvZXMgbm90IGZpeCBpdCwgIisicGxlYXNlIG9wZW4gYW4gaXNzdWUgaW4gaHR0cHM6Ly9naXRodWIuY29tL2dhdHNieWpzL2dhdHNieS9pc3N1ZXMiKTt9fTtfX3NpZ25hdHVyZV9fKHVzZVN0YXRpY1F1ZXJ5LCJ1c2VDb250ZXh0e2NvbnRleHR9Iik7U3RhdGljUXVlcnkucHJvcFR5cGVzPXtkYXRhOnByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub2JqZWN0LHF1ZXJ5OnByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nLmlzUmVxdWlyZWQscmVuZGVyOnByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYyxjaGlsZHJlbjpwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmN9O2Z1bmN0aW9uIGdyYXBocWwoKXt0aHJvdyBuZXcgRXJyb3IoIkl0IGFwcGVhcnMgbGlrZSBHYXRzYnkgaXMgbWlzY29uZmlndXJlZC4gR2F0c2J5IHJlbGF0ZWQgYGdyYXBocWxgIGNhbGxzICIrImFyZSBzdXBwb3NlZCB0byBvbmx5IGJlIGV2YWx1YXRlZCBhdCBjb21waWxlIHRpbWUsIGFuZCB0aGVuIGNvbXBpbGVkIGF3YXkuICIrIlVuZm9ydHVuYXRlbHksIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcXVlcnkgd2FzIGxlZnQgaW4gdGhlIGNvbXBpbGVkIGNvZGUuXG5cbiIrIlVubGVzcyB5b3VyIHNpdGUgaGFzIGEgY29tcGxleCBvciBjdXN0b20gYmFiZWwvR2F0c2J5IGNvbmZpZ3VyYXRpb24gdGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gR2F0c2J5LiIpO307KGZ1bmN0aW9uKCl7dmFyIHJlYWN0SG90TG9hZGVyPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQ6dW5kZWZpbmVkO2lmKCFyZWFjdEhvdExvYWRlcil7cmV0dXJuO31yZWFjdEhvdExvYWRlci5yZWdpc3RlcihwcmVmZXRjaFBhdGhuYW1lLCJwcmVmZXRjaFBhdGhuYW1lIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9nYXRzYnktYnJvd3Nlci1lbnRyeS5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKFN0YXRpY1F1ZXJ5Q29udGV4dCwiU3RhdGljUXVlcnlDb250ZXh0IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9nYXRzYnktYnJvd3Nlci1lbnRyeS5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKFN0YXRpY1F1ZXJ5RGF0YVJlbmRlcmVyLCJTdGF0aWNRdWVyeURhdGFSZW5kZXJlciIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvZ2F0c2J5LWJyb3dzZXItZW50cnkuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihTdGF0aWNRdWVyeSwiU3RhdGljUXVlcnkiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2dhdHNieS1icm93c2VyLWVudHJ5LmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIodXNlU3RhdGljUXVlcnksInVzZVN0YXRpY1F1ZXJ5IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9nYXRzYnktYnJvd3Nlci1lbnRyeS5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKGdyYXBocWwsImdyYXBocWwiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2dhdHNieS1icm93c2VyLWVudHJ5LmpzIik7fSkoKTs7KGZ1bmN0aW9uKCl7dmFyIGxlYXZlTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmxlYXZlTW9kdWxlOnVuZGVmaW5lZDtsZWF2ZU1vZHVsZSYmbGVhdmVNb2R1bGUobW9kdWxlKTt9KSgpOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzICovICIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiKShtb2R1bGUpKSkKCi8qKiovIH0pLAoKLyoqKi8gIi4vLmNhY2hlL2pzb24tc3RvcmUuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vLmNhY2hlL2pzb24tc3RvcmUuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfb2JqZWN0X2Fzc2lnbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfb2JqZWN0X2Fzc2lnbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczZfb2JqZWN0X2Fzc2lnbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXNtX2luaGVyaXRzTG9vc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UgKi8gIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISByZWFjdCAqLyAiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFnZV9yZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYWdlLXJlbmRlcmVyICovICIuLy5jYWNoZS9wYWdlLXJlbmRlcmVyLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9ybWFsaXplX3BhZ2VfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub3JtYWxpemUtcGFnZS1wYXRoICovICIuLy5jYWNoZS9ub3JtYWxpemUtcGFnZS1wYXRoLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBnYXRzYnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGdhdHNieSAqLyAiLi8uY2FjaGUvZ2F0c2J5LWJyb3dzZXItZW50cnkuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zb2NrZXRJb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zb2NrZXRJbyAqLyAiLi8uY2FjaGUvc29ja2V0SW8uanMiKTsKdmFyIF9qc3hGaWxlTmFtZT0iL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9qc29uLXN0b3JlLmpzIjsoZnVuY3Rpb24oKXt2YXIgZW50ZXJNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZW50ZXJNb2R1bGU6dW5kZWZpbmVkO2VudGVyTW9kdWxlJiZlbnRlck1vZHVsZShtb2R1bGUpO30pKCk7dmFyIF9fc2lnbmF0dXJlX189dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdC5zaWduYXR1cmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE7fTtpZihmYWxzZSl7fXZhciBnZXRQYXRoRnJvbVByb3BzPWZ1bmN0aW9uIGdldFBhdGhGcm9tUHJvcHMocHJvcHMpe3JldHVybiBwcm9wcy5wYWdlUmVzb3VyY2VzJiZwcm9wcy5wYWdlUmVzb3VyY2VzLnBhZ2U/T2JqZWN0KF9ub3JtYWxpemVfcGFnZV9wYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bImRlZmF1bHQiXSkocHJvcHMucGFnZVJlc291cmNlcy5wYWdlLnBhdGgpOnVuZGVmaW5lZDt9O3ZhciBKU09OU3RvcmU9LyojX19QVVJFX18qL2Z1bmN0aW9uKF9SZWFjdCRDb21wb25lbnQpe09iamVjdChfYmFiZWxfcnVudGltZV9oZWxwZXJzX2VzbV9pbmhlcml0c0xvb3NlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImRlZmF1bHQiXSkoSlNPTlN0b3JlLF9SZWFjdCRDb21wb25lbnQpO2Z1bmN0aW9uIEpTT05TdG9yZShwcm9wcyl7dmFyIF90aGlzO190aGlzPV9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLHByb3BzKXx8dGhpcztfdGhpcy5oYW5kbGVNaXR0RXZlbnQ9ZnVuY3Rpb24odHlwZSxldmVudCl7X3RoaXMuc2V0U3RhdGUoe3N0YXRpY1F1ZXJ5RGF0YTpPYmplY3QoX3NvY2tldElvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bImdldFN0YXRpY1F1ZXJ5RGF0YSJdKSgpLHBhZ2VRdWVyeURhdGE6T2JqZWN0KF9zb2NrZXRJb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJnZXRQYWdlUXVlcnlEYXRhIl0pKCl9KTt9O190aGlzLnN0YXRlPXtzdGF0aWNRdWVyeURhdGE6T2JqZWN0KF9zb2NrZXRJb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJnZXRTdGF0aWNRdWVyeURhdGEiXSkoKSxwYWdlUXVlcnlEYXRhOk9iamVjdChfc29ja2V0SW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siZ2V0UGFnZVF1ZXJ5RGF0YSJdKSgpLHBhdGg6bnVsbH07cmV0dXJuIF90aGlzO312YXIgX3Byb3RvPUpTT05TdG9yZS5wcm90b3R5cGU7X3Byb3RvLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCl7T2JqZWN0KF9zb2NrZXRJb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJyZWdpc3RlclBhdGgiXSkoZ2V0UGF0aEZyb21Qcm9wcyh0aGlzLnByb3BzKSk7X19fZW1pdHRlci5vbigiKiIsdGhpcy5oYW5kbGVNaXR0RXZlbnQpO307X3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7T2JqZWN0KF9zb2NrZXRJb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJ1bnJlZ2lzdGVyUGF0aCJdKSh0aGlzLnN0YXRlLnBhdGgpO19fX2VtaXR0ZXIub2ZmKCIqIix0aGlzLmhhbmRsZU1pdHRFdmVudCk7fTtKU09OU3RvcmUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPWZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcyxzdGF0ZSl7dmFyIG5ld1BhdGg9Z2V0UGF0aEZyb21Qcm9wcyhwcm9wcyk7aWYobmV3UGF0aCE9PXN0YXRlLnBhdGgpe09iamVjdChfc29ja2V0SW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1sidW5yZWdpc3RlclBhdGgiXSkoc3RhdGUucGF0aCk7T2JqZWN0KF9zb2NrZXRJb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJyZWdpc3RlclBhdGgiXSkobmV3UGF0aCk7cmV0dXJue3BhdGg6bmV3UGF0aH07fXJldHVybiBudWxsO307X3Byb3RvLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLG5leHRTdGF0ZSl7Ly8gV2Ugd2FudCB0byB1cGRhdGUgdGhpcyBjb21wb25lbnQgd2hlbjoKLy8gLSBsb2NhdGlvbiBjaGFuZ2VkCi8vIC0gcGFnZSBkYXRhIGZvciBwYXRoIGNoYW5nZWQKLy8gLSBzdGF0aWMgcXVlcnkgcmVzdWx0cyBjaGFuZ2VkCnJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uIT09bmV4dFByb3BzLmxvY2F0aW9ufHx0aGlzLnN0YXRlLnBhdGghPT1uZXh0U3RhdGUucGF0aHx8dGhpcy5zdGF0ZS5wYWdlUXVlcnlEYXRhW09iamVjdChfbm9ybWFsaXplX3BhZ2VfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJkZWZhdWx0Il0pKG5leHRTdGF0ZS5wYXRoKV0hPT1uZXh0U3RhdGUucGFnZVF1ZXJ5RGF0YVtPYmplY3QoX25vcm1hbGl6ZV9wYWdlX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siZGVmYXVsdCJdKShuZXh0U3RhdGUucGF0aCldfHx0aGlzLnN0YXRlLnN0YXRpY1F1ZXJ5RGF0YSE9PW5leHRTdGF0ZS5zdGF0aWNRdWVyeURhdGE7fTtfcHJvdG8ucmVuZGVyPWZ1bmN0aW9uIHJlbmRlcigpe3ZhciBkYXRhPXRoaXMuc3RhdGUucGFnZVF1ZXJ5RGF0YVtnZXRQYXRoRnJvbVByb3BzKHRoaXMucHJvcHMpXTsvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUKaWYoIWRhdGEpe3JldHVybiByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtfX3NvdXJjZTp7ZmlsZU5hbWU6X2pzeEZpbGVOYW1lLGxpbmVOdW1iZXI6ODh9LF9fc2VsZjp0aGlzfSk7fXJldHVybiByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KGdhdHNieV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTdGF0aWNRdWVyeUNvbnRleHQiXS5Qcm92aWRlcix7dmFsdWU6dGhpcy5zdGF0ZS5zdGF0aWNRdWVyeURhdGEsX19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjkyfSxfX3NlbGY6dGhpc30scmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfcGFnZV9yZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJkZWZhdWx0Il0sT2JqZWN0LmFzc2lnbih7fSx0aGlzLnByb3BzLGRhdGEse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo5M30sX19zZWxmOnRoaXN9KSkpO307Ly8gQHRzLWlnbm9yZQpfcHJvdG8uX19yZWFjdHN0YW5kaW5fX3JlZ2VuZXJhdGVCeUV2YWw9ZnVuY3Rpb24gX19yZWFjdHN0YW5kaW5fX3JlZ2VuZXJhdGVCeUV2YWwoa2V5LGNvZGUpey8vIEB0cy1pZ25vcmUKdGhpc1trZXldPWV2YWwoY29kZSk7fTtyZXR1cm4gSlNPTlN0b3JlO30ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEuQ29tcG9uZW50KTt2YXIgX2RlZmF1bHQ9SlNPTlN0b3JlOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gKF9kZWZhdWx0KTs7KGZ1bmN0aW9uKCl7dmFyIHJlYWN0SG90TG9hZGVyPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQ6dW5kZWZpbmVkO2lmKCFyZWFjdEhvdExvYWRlcil7cmV0dXJuO31yZWFjdEhvdExvYWRlci5yZWdpc3RlcihnZXRQYXRoRnJvbVByb3BzLCJnZXRQYXRoRnJvbVByb3BzIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9qc29uLXN0b3JlLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoSlNPTlN0b3JlLCJKU09OU3RvcmUiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2pzb24tc3RvcmUuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihfZGVmYXVsdCwiZGVmYXVsdCIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvanNvbi1zdG9yZS5qcyIpO30pKCk7OyhmdW5jdGlvbigpe3ZhciBsZWF2ZU1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5sZWF2ZU1vZHVsZTp1bmRlZmluZWQ7bGVhdmVNb2R1bGUmJmxlYXZlTW9kdWxlKG1vZHVsZSk7fSkoKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyAqLyAiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIikobW9kdWxlKSkpCgovKioqLyB9KSwKCi8qKiovICIuLy5jYWNoZS9sb2FkZXIuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvbG9hZGVyLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBCYXNlTG9hZGVyLCBQcm9kTG9hZGVyLCBzZXRMb2FkZXIsIHB1YmxpY0xvYWRlciwgZGVmYXVsdCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkgey8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJhc2VMb2FkZXI7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQcm9kTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQcm9kTG9hZGVyOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2V0TG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRMb2FkZXI7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwdWJsaWNMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHB1YmxpY0xvYWRlcjsgfSk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2VzbV9pbmhlcml0c0xvb3NlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlICovICIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2VzbV90b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkgKi8gIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X3NldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X3NldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczZfc2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl9kb21faXRlcmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl9kb21faXRlcmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfd2ViX2RvbV9pdGVyYWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfYXJyYXlfaXRlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfYXJyYXlfaXRlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X2FycmF5X2l0ZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9zdHJpbmdfaXRlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9zdHJpbmdfaXRlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X3N0cmluZ19pdGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfbWFwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2Lm1hcCAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfbWFwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9tYXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM3X2FycmF5X2luY2x1ZGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzICovICIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM3X2FycmF5X2luY2x1ZGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzN19hcnJheV9pbmNsdWRlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfc3RyaW5nX2luY2x1ZGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcyAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lczZfc3RyaW5nX2luY2x1ZGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9zdHJpbmdfaW5jbHVkZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF9hc3NpZ25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbiAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF9hc3NpZ25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF9hc3NpZ25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X3Byb21pc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2LnByb21pc2UgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9wcm9taXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczZfcHJvbWlzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF90b19zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcgKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfdG9fc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczZfb2JqZWN0X3RvX3N0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X3N0cmluZ19lbmRzX3dpdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGggKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9zdHJpbmdfZW5kc193aXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczZfc3RyaW5nX2VuZHNfd2l0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJlZmV0Y2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ByZWZldGNoICovICIuLy5jYWNoZS9wcmVmZXRjaC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2VtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VtaXR0ZXIgKi8gIi4vLmNhY2hlL2VtaXR0ZXIuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9maW5kX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ZpbmQtcGF0aCAqLyAiLi8uY2FjaGUvZmluZC1wYXRoLmpzIik7CihmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9O3ZhciBwcmVmZXJEZWZhdWx0PWZ1bmN0aW9uIHByZWZlckRlZmF1bHQobSl7cmV0dXJuIG0mJm0uZGVmYXVsdHx8bTt9O3ZhciBzdHJpcFN1cnJvdW5kaW5nU2xhc2hlcz1mdW5jdGlvbiBzdHJpcFN1cnJvdW5kaW5nU2xhc2hlcyhzKXtzPXNbMF09PT0iLyI/cy5zbGljZSgxKTpzO3M9cy5lbmRzV2l0aCgiLyIpP3Muc2xpY2UoMCwtMSk6cztyZXR1cm4gczt9O3ZhciBjcmVhdGVQYWdlRGF0YVVybD1mdW5jdGlvbiBjcmVhdGVQYWdlRGF0YVVybChwYXRoKXt2YXIgZml4ZWRQYXRoPXBhdGg9PT0iLyI/ImluZGV4IjpzdHJpcFN1cnJvdW5kaW5nU2xhc2hlcyhwYXRoKTtyZXR1cm4gIiIrIi9wYWdlLWRhdGEvIitmaXhlZFBhdGgrIi9wYWdlLWRhdGEuanNvbiI7fTt2YXIgZG9GZXRjaD1mdW5jdGlvbiBkb0ZldGNoKHVybCxtZXRob2Qpe2lmKG1ldGhvZD09PXZvaWQgMCl7bWV0aG9kPSJHRVQiO31yZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3Qpe3ZhciByZXE9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7cmVxLm9wZW4obWV0aG9kLHVybCx0cnVlKTtyZXEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYocmVxLnJlYWR5U3RhdGU9PTQpe3Jlc29sdmUocmVxKTt9fTtyZXEuc2VuZChudWxsKTt9KTt9O3ZhciBfbG9hZFBhZ2VEYXRhSnNvbj1mdW5jdGlvbiBsb2FkUGFnZURhdGFKc29uKGxvYWRPYmope3ZhciBwYWdlUGF0aD1sb2FkT2JqLnBhZ2VQYXRoLF9sb2FkT2JqJHJldHJpZXM9bG9hZE9iai5yZXRyaWVzLHJldHJpZXM9X2xvYWRPYmokcmV0cmllcz09PXZvaWQgMD8wOl9sb2FkT2JqJHJldHJpZXM7dmFyIHVybD1jcmVhdGVQYWdlRGF0YVVybChwYWdlUGF0aCk7cmV0dXJuIGRvRmV0Y2godXJsKS50aGVuKGZ1bmN0aW9uKHJlcSl7dmFyIHN0YXR1cz1yZXEuc3RhdHVzLHJlc3BvbnNlVGV4dD1yZXEucmVzcG9uc2VUZXh0Oy8vIEhhbmRsZSAyMDAKaWYoc3RhdHVzPT09MjAwKXt0cnl7dmFyIGpzb25QYXlsb2FkPUpTT04ucGFyc2UocmVzcG9uc2VUZXh0KTtpZihqc29uUGF5bG9hZC53ZWJwYWNrQ29tcGlsYXRpb25IYXNoPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoIm5vdCBhIHZhbGlkIHBhZ2VEYXRhIHJlc3BvbnNlIik7fXJldHVybiBPYmplY3QuYXNzaWduKGxvYWRPYmose3N0YXR1czoic3VjY2VzcyIscGF5bG9hZDpqc29uUGF5bG9hZH0pO31jYXRjaChlcnIpey8vIGNvbnRpbnVlIHJlZ2FyZGxlc3Mgb2YgZXJyb3IKfX0vLyBIYW5kbGUgNDA0CmlmKHN0YXR1cz09PTQwNHx8c3RhdHVzPT09MjAwKXsvLyBJZiB0aGUgcmVxdWVzdCB3YXMgZm9yIGEgNDA0IHBhZ2UgYW5kIGl0IGRvZXNuJ3QgZXhpc3QsIHdlJ3JlIGRvbmUKaWYocGFnZVBhdGg9PT0iLzQwNC5odG1sIil7cmV0dXJuIE9iamVjdC5hc3NpZ24obG9hZE9iaix7c3RhdHVzOiJmYWlsdXJlIn0pO30vLyBOZWVkIHNvbWUgY29kZSBoZXJlIHRvIGNhY2hlIHRoZSA0MDQgcmVxdWVzdC4gSW4gY2FzZQovLyBtdWx0aXBsZSBsb2FkUGFnZURhdGFKc29ucyByZXN1bHQgaW4gNDA0cwpyZXR1cm4gX2xvYWRQYWdlRGF0YUpzb24oT2JqZWN0LmFzc2lnbihsb2FkT2JqLHtwYWdlUGF0aDoiLzQwNC5odG1sIixub3RGb3VuZDp0cnVlfSkpO30vLyBoYW5kbGUgNTAwIHJlc3BvbnNlIChVbnJlY292ZXJhYmxlKQppZihzdGF0dXM9PT01MDApe3JldHVybiBPYmplY3QuYXNzaWduKGxvYWRPYmose3N0YXR1czoiZXJyb3IifSk7fS8vIEhhbmRsZSBldmVyeXRoaW5nIGVsc2UsIGluY2x1ZGluZyBzdGF0dXMgPT09IDAsIGFuZCA1MDNzLiBTaG91bGQgcmV0cnkKaWYocmV0cmllczwzKXtyZXR1cm4gX2xvYWRQYWdlRGF0YUpzb24oT2JqZWN0LmFzc2lnbihsb2FkT2JqLHtyZXRyaWVzOnJldHJpZXMrMX0pKTt9Ly8gUmV0cmllZCAzIHRpbWVzIGFscmVhZHksIHJlc3VsdCBpcyBhIGZhaWx1cmUuCnJldHVybiBPYmplY3QuYXNzaWduKGxvYWRPYmose3N0YXR1czoiZXJyb3IifSk7fSk7fTt2YXIgZG9lc0Nvbm5lY3Rpb25TdXBwb3J0UHJlZmV0Y2g9ZnVuY3Rpb24gZG9lc0Nvbm5lY3Rpb25TdXBwb3J0UHJlZmV0Y2goKXtpZigiY29ubmVjdGlvbiJpbiBuYXZpZ2F0b3ImJnR5cGVvZiBuYXZpZ2F0b3IuY29ubmVjdGlvbiE9PSJ1bmRlZmluZWQiKXtpZigobmF2aWdhdG9yLmNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZXx8IiIpLmluY2x1ZGVzKCIyZyIpKXtyZXR1cm4gZmFsc2U7fWlmKG5hdmlnYXRvci5jb25uZWN0aW9uLnNhdmVEYXRhKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9O3ZhciB0b1BhZ2VSZXNvdXJjZXM9ZnVuY3Rpb24gdG9QYWdlUmVzb3VyY2VzKHBhZ2VEYXRhLGNvbXBvbmVudCl7aWYoY29tcG9uZW50PT09dm9pZCAwKXtjb21wb25lbnQ9bnVsbDt9dmFyIHBhZ2U9e2NvbXBvbmVudENodW5rTmFtZTpwYWdlRGF0YS5jb21wb25lbnRDaHVua05hbWUscGF0aDpwYWdlRGF0YS5wYXRoLHdlYnBhY2tDb21waWxhdGlvbkhhc2g6cGFnZURhdGEud2VicGFja0NvbXBpbGF0aW9uSGFzaCxtYXRjaFBhdGg6cGFnZURhdGEubWF0Y2hQYXRofTtyZXR1cm57Y29tcG9uZW50OmNvbXBvbmVudCxqc29uOnBhZ2VEYXRhLnJlc3VsdCxwYWdlOnBhZ2V9O307dmFyIEJhc2VMb2FkZXI9LyojX19QVVJFX18qL2Z1bmN0aW9uKCl7ZnVuY3Rpb24gQmFzZUxvYWRlcihsb2FkQ29tcG9uZW50LG1hdGNoUGF0aHMpey8vIE1hcCBvZiBwYWdlUGF0aCAtPiBQYWdlLiBXaGVyZSBQYWdlIGlzIGFuIG9iamVjdCB3aXRoOiB7Ci8vICAgc3RhdHVzOiBgc3VjY2Vzc2AgfHwgYGVycm9yYCwKLy8gICBwYXlsb2FkOiBQYWdlUmVzb3VyY2VzLCAvLyB1bmRlZmluZWQgaWYgYGVycm9yYAovLyB9Ci8vIFBhZ2VSZXNvdXJjZXMgaXMgewovLyAgIGNvbXBvbmVudCwKLy8gICBqc29uOiBwYWdlRGF0YS5yZXN1bHQsCi8vICAgcGFnZTogewovLyAgICAgY29tcG9uZW50Q2h1bmtOYW1lLAovLyAgICAgcGF0aCwKLy8gICAgIHdlYnBhY2tDb21waWxhdGlvbkhhc2gsCi8vICAgfQovLyB9CnRoaXMucGFnZURiPW5ldyBNYXAoKTt0aGlzLmluRmxpZ2h0RGI9bmV3IE1hcCgpO3RoaXMucGFnZURhdGFEYj1uZXcgTWFwKCk7dGhpcy5wcmVmZXRjaFRyaWdnZXJlZD1uZXcgU2V0KCk7dGhpcy5wcmVmZXRjaENvbXBsZXRlZD1uZXcgU2V0KCk7dGhpcy5sb2FkQ29tcG9uZW50PWxvYWRDb21wb25lbnQ7T2JqZWN0KF9maW5kX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bInNldE1hdGNoUGF0aHMiXSkobWF0Y2hQYXRocyk7fXZhciBfcHJvdG89QmFzZUxvYWRlci5wcm90b3R5cGU7X3Byb3RvLnNldEFwaVJ1bm5lcj1mdW5jdGlvbiBzZXRBcGlSdW5uZXIoYXBpUnVubmVyKXt0aGlzLmFwaVJ1bm5lcj1hcGlSdW5uZXI7dGhpcy5wcmVmZXRjaERpc2FibGVkPWFwaVJ1bm5lcigiZGlzYWJsZUNvcmVQcmVmZXRjaGluZyIpLnNvbWUoZnVuY3Rpb24oYSl7cmV0dXJuIGE7fSk7fTtfcHJvdG8ubG9hZFBhZ2VEYXRhSnNvbj1mdW5jdGlvbiBsb2FkUGFnZURhdGFKc29uKHJhd1BhdGgpe3ZhciBfdGhpcz10aGlzO3ZhciBwYWdlUGF0aD1PYmplY3QoX2ZpbmRfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siZmluZFBhdGgiXSkocmF3UGF0aCk7aWYodGhpcy5wYWdlRGF0YURiLmhhcyhwYWdlUGF0aCkpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5wYWdlRGF0YURiLmdldChwYWdlUGF0aCkpO31yZXR1cm4gX2xvYWRQYWdlRGF0YUpzb24oe3BhZ2VQYXRoOnBhZ2VQYXRofSkudGhlbihmdW5jdGlvbihwYWdlRGF0YSl7X3RoaXMucGFnZURhdGFEYi5zZXQocGFnZVBhdGgscGFnZURhdGEpO3JldHVybiBwYWdlRGF0YTt9KTt9O19wcm90by5maW5kTWF0Y2hQYXRoPWZ1bmN0aW9uIGZpbmRNYXRjaFBhdGgocmF3UGF0aCl7cmV0dXJuIE9iamVjdChfZmluZF9wYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJmaW5kTWF0Y2hQYXRoIl0pKHJhd1BhdGgpO30vLyBUT0RPIGNoZWNrIGFsbCB1c2VzIG9mIHRoaXMgYW5kIHdoZXRoZXIgdGhleSB1c2UgdW5kZWZpbmVkIGZvciBwYWdlIHJlc291cmNlcyBub3QgZXhpc3QKO19wcm90by5sb2FkUGFnZT1mdW5jdGlvbiBsb2FkUGFnZShyYXdQYXRoKXt2YXIgX3RoaXMyPXRoaXM7dmFyIHBhZ2VQYXRoPU9iamVjdChfZmluZF9wYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJmaW5kUGF0aCJdKShyYXdQYXRoKTtpZih0aGlzLnBhZ2VEYi5oYXMocGFnZVBhdGgpKXt2YXIgcGFnZT10aGlzLnBhZ2VEYi5nZXQocGFnZVBhdGgpO3JldHVybiBQcm9taXNlLnJlc29sdmUocGFnZS5wYXlsb2FkKTt9aWYodGhpcy5pbkZsaWdodERiLmhhcyhwYWdlUGF0aCkpe3JldHVybiB0aGlzLmluRmxpZ2h0RGIuZ2V0KHBhZ2VQYXRoKTt9dmFyIGluRmxpZ2h0PXRoaXMubG9hZFBhZ2VEYXRhSnNvbihwYWdlUGF0aCkudGhlbihmdW5jdGlvbihyZXN1bHQpe2lmKHJlc3VsdC5zdGF0dXM9PT0iZXJyb3IiKXtyZXR1cm57c3RhdHVzOiJlcnJvciJ9O31pZihyZXN1bHQuc3RhdHVzPT09ImZhaWx1cmUiKXsvLyB0aHJvdyBhbiBlcnJvciBzbyBlcnJvciB0cmFja2VycyBjYW4gcGljayB0aGlzIHVwCnRocm93IG5ldyBFcnJvcigiNDA0IHBhZ2UgY291bGQgbm90IGJlIGZvdW5kLiBDaGVja291dCBodHRwczovL3d3dy5nYXRzYnlqcy5vcmcvZG9jcy9hZGQtNDA0LXBhZ2UvIik7fXZhciBwYWdlRGF0YT1yZXN1bHQucGF5bG9hZDt2YXIgY29tcG9uZW50Q2h1bmtOYW1lPXBhZ2VEYXRhLmNvbXBvbmVudENodW5rTmFtZTtyZXR1cm4gX3RoaXMyLmxvYWRDb21wb25lbnQoY29tcG9uZW50Q2h1bmtOYW1lKS50aGVuKGZ1bmN0aW9uKGNvbXBvbmVudCl7dmFyIGZpbmFsUmVzdWx0PXtjcmVhdGVkQXQ6bmV3IERhdGUoKX07dmFyIHBhZ2VSZXNvdXJjZXM7aWYoIWNvbXBvbmVudCl7ZmluYWxSZXN1bHQuc3RhdHVzPSJlcnJvciI7fWVsc2V7ZmluYWxSZXN1bHQuc3RhdHVzPSJzdWNjZXNzIjtpZihyZXN1bHQubm90Rm91bmQ9PT10cnVlKXtmaW5hbFJlc3VsdC5ub3RGb3VuZD10cnVlO31wYWdlUmVzb3VyY2VzPXRvUGFnZVJlc291cmNlcyhwYWdlRGF0YSxjb21wb25lbnQpO2ZpbmFsUmVzdWx0LnBheWxvYWQ9cGFnZVJlc291cmNlcztfZW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siZGVmYXVsdCJdLmVtaXQoIm9uUG9zdExvYWRQYWdlUmVzb3VyY2VzIix7cGFnZTpwYWdlUmVzb3VyY2VzLHBhZ2VSZXNvdXJjZXM6cGFnZVJlc291cmNlc30pO31fdGhpczIucGFnZURiLnNldChwYWdlUGF0aCxmaW5hbFJlc3VsdCk7Ly8gdW5kZWZpbmVkIGlmIGZpbmFsIHJlc3VsdCBpcyBhbiBlcnJvcgpyZXR1cm4gcGFnZVJlc291cmNlczt9KTt9KS8vIHByZWZlciBkdXBsaWNhdGlvbiB3aXRoIHRoZW4gKyBjYXRjaCBvdmVyIC5maW5hbGx5IHRvIHByZXZlbnQgcHJvYmxlbXMgaW4gaWUxMSArIGZpcmVmb3gKLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2Upe190aGlzMi5pbkZsaWdodERiLmRlbGV0ZShwYWdlUGF0aCk7cmV0dXJuIHJlc3BvbnNlO30pLmNhdGNoKGZ1bmN0aW9uKGVycil7X3RoaXMyLmluRmxpZ2h0RGIuZGVsZXRlKHBhZ2VQYXRoKTt0aHJvdyBlcnI7fSk7dGhpcy5pbkZsaWdodERiLnNldChwYWdlUGF0aCxpbkZsaWdodCk7cmV0dXJuIGluRmxpZ2h0O30vLyByZXR1cm5zIHVuZGVmaW5lZCBpZiBsb2FkaW5nIHBhZ2UgcmFuIGludG8gZXJyb3JzCjtfcHJvdG8ubG9hZFBhZ2VTeW5jPWZ1bmN0aW9uIGxvYWRQYWdlU3luYyhyYXdQYXRoKXt2YXIgcGFnZVBhdGg9T2JqZWN0KF9maW5kX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bImZpbmRQYXRoIl0pKHJhd1BhdGgpO2lmKHRoaXMucGFnZURiLmhhcyhwYWdlUGF0aCkpe3JldHVybiB0aGlzLnBhZ2VEYi5nZXQocGFnZVBhdGgpLnBheWxvYWQ7fXJldHVybiB1bmRlZmluZWQ7fTtfcHJvdG8uc2hvdWxkUHJlZmV0Y2g9ZnVuY3Rpb24gc2hvdWxkUHJlZmV0Y2gocGFnZVBhdGgpey8vIFNraXAgcHJlZmV0Y2hpbmcgaWYgd2Uga25vdyB1c2VyIGlzIG9uIHNsb3cgb3IgY29uc3RyYWluZWQgY29ubmVjdGlvbgppZighZG9lc0Nvbm5lY3Rpb25TdXBwb3J0UHJlZmV0Y2goKSl7cmV0dXJuIGZhbHNlO30vLyBDaGVjayBpZiB0aGUgcGFnZSBleGlzdHMuCmlmKHRoaXMucGFnZURiLmhhcyhwYWdlUGF0aCkpe3JldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fTtfcHJvdG8ucHJlZmV0Y2g9ZnVuY3Rpb24gcHJlZmV0Y2gocGFnZVBhdGgpe3ZhciBfdGhpczM9dGhpcztpZighdGhpcy5zaG91bGRQcmVmZXRjaChwYWdlUGF0aCkpe3JldHVybiBmYWxzZTt9Ly8gVGVsbCBwbHVnaW5zIHdpdGggY3VzdG9tIHByZWZldGNoaW5nIGxvZ2ljIHRoYXQgdGhleSBzaG91bGQgc3RhcnQKLy8gcHJlZmV0Y2hpbmcgdGhpcyBwYXRoLgppZighdGhpcy5wcmVmZXRjaFRyaWdnZXJlZC5oYXMocGFnZVBhdGgpKXt0aGlzLmFwaVJ1bm5lcigib25QcmVmZXRjaFBhdGhuYW1lIix7cGF0aG5hbWU6cGFnZVBhdGh9KTt0aGlzLnByZWZldGNoVHJpZ2dlcmVkLmFkZChwYWdlUGF0aCk7fS8vIElmIGEgcGx1Z2luIGhhcyBkaXNhYmxlZCBjb3JlIHByZWZldGNoaW5nLCBzdG9wIG5vdy4KaWYodGhpcy5wcmVmZXRjaERpc2FibGVkKXtyZXR1cm4gZmFsc2U7fXZhciByZWFsUGF0aD1PYmplY3QoX2ZpbmRfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siZmluZFBhdGgiXSkocGFnZVBhdGgpOy8vIFRvZG8gbWFrZSBkb1ByZWZldGNoIGxvZ2ljIGNhY2hlYWJsZQovLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm4KdGhpcy5kb1ByZWZldGNoKHJlYWxQYXRoKS50aGVuKGZ1bmN0aW9uKCl7aWYoIV90aGlzMy5wcmVmZXRjaENvbXBsZXRlZC5oYXMocGFnZVBhdGgpKXtfdGhpczMuYXBpUnVubmVyKCJvblBvc3RQcmVmZXRjaFBhdGhuYW1lIix7cGF0aG5hbWU6cGFnZVBhdGh9KTtfdGhpczMucHJlZmV0Y2hDb21wbGV0ZWQuYWRkKHBhZ2VQYXRoKTt9fSk7cmV0dXJuIHRydWU7fTtfcHJvdG8uZG9QcmVmZXRjaD1mdW5jdGlvbiBkb1ByZWZldGNoKHBhZ2VQYXRoKXt0aHJvdyBuZXcgRXJyb3IoImRvUHJlZmV0Y2ggbm90IGltcGxlbWVudGVkIik7fTtfcHJvdG8uaG92ZXJpbmc9ZnVuY3Rpb24gaG92ZXJpbmcocmF3UGF0aCl7dGhpcy5sb2FkUGFnZShyYXdQYXRoKTt9O19wcm90by5nZXRSZXNvdXJjZVVSTHNGb3JQYXRobmFtZT1mdW5jdGlvbiBnZXRSZXNvdXJjZVVSTHNGb3JQYXRobmFtZShyYXdQYXRoKXt2YXIgcGFnZVBhdGg9T2JqZWN0KF9maW5kX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bImZpbmRQYXRoIl0pKHJhd1BhdGgpO3ZhciBwYWdlPXRoaXMucGFnZURhdGFEYi5nZXQocGFnZVBhdGgpO2lmKHBhZ2Upe3ZhciBwYWdlUmVzb3VyY2VzPXRvUGFnZVJlc291cmNlcyhwYWdlLnBheWxvYWQpO3JldHVybltdLmNvbmNhdChPYmplY3QoX2JhYmVsX3J1bnRpbWVfaGVscGVyc19lc21fdG9Db25zdW1hYmxlQXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZGVmYXVsdCJdKShjcmVhdGVDb21wb25lbnRVcmxzKHBhZ2VSZXNvdXJjZXMucGFnZS5jb21wb25lbnRDaHVua05hbWUpKSxbY3JlYXRlUGFnZURhdGFVcmwocGFnZVBhdGgpXSk7fWVsc2V7cmV0dXJuIG51bGw7fX07X3Byb3RvLmlzUGFnZU5vdEZvdW5kPWZ1bmN0aW9uIGlzUGFnZU5vdEZvdW5kKHJhd1BhdGgpe3ZhciBwYWdlUGF0aD1PYmplY3QoX2ZpbmRfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siZmluZFBhdGgiXSkocmF3UGF0aCk7dmFyIHBhZ2U9dGhpcy5wYWdlRGIuZ2V0KHBhZ2VQYXRoKTtyZXR1cm4gcGFnZSYmcGFnZS5ub3RGb3VuZD09PXRydWU7fTsvLyBAdHMtaWdub3JlCl9wcm90by5fX3JlYWN0c3RhbmRpbl9fcmVnZW5lcmF0ZUJ5RXZhbD1mdW5jdGlvbiBfX3JlYWN0c3RhbmRpbl9fcmVnZW5lcmF0ZUJ5RXZhbChrZXksY29kZSl7Ly8gQHRzLWlnbm9yZQp0aGlzW2tleV09ZXZhbChjb2RlKTt9O3JldHVybiBCYXNlTG9hZGVyO30oKTt2YXIgY3JlYXRlQ29tcG9uZW50VXJscz1mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRVcmxzKGNvbXBvbmVudENodW5rTmFtZSl7cmV0dXJuIHdpbmRvdy5fX19jaHVua01hcHBpbmdbY29tcG9uZW50Q2h1bmtOYW1lXS5tYXAoZnVuY3Rpb24oY2h1bmspe3JldHVybiAiIitjaHVuazt9KTt9O3ZhciBQcm9kTG9hZGVyPS8qI19fUFVSRV9fKi9mdW5jdGlvbihfQmFzZUxvYWRlcil7T2JqZWN0KF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXNtX2luaGVyaXRzTG9vc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZGVmYXVsdCJdKShQcm9kTG9hZGVyLF9CYXNlTG9hZGVyKTtmdW5jdGlvbiBQcm9kTG9hZGVyKGFzeW5jUmVxdWlyZXMsbWF0Y2hQYXRocyl7dmFyIGxvYWRDb21wb25lbnQ9ZnVuY3Rpb24gbG9hZENvbXBvbmVudChjaHVua05hbWUpe3JldHVybiBhc3luY1JlcXVpcmVzLmNvbXBvbmVudHNbY2h1bmtOYW1lXSgpLnRoZW4ocHJlZmVyRGVmYXVsdCk7fTtyZXR1cm4gX0Jhc2VMb2FkZXIuY2FsbCh0aGlzLGxvYWRDb21wb25lbnQsbWF0Y2hQYXRocyl8fHRoaXM7fXZhciBfcHJvdG8yPVByb2RMb2FkZXIucHJvdG90eXBlO19wcm90bzIuZG9QcmVmZXRjaD1mdW5jdGlvbiBkb1ByZWZldGNoKHBhZ2VQYXRoKXt2YXIgX3RoaXM0PXRoaXM7dmFyIHBhZ2VEYXRhVXJsPWNyZWF0ZVBhZ2VEYXRhVXJsKHBhZ2VQYXRoKTtyZXR1cm4gT2JqZWN0KF9wcmVmZXRjaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siZGVmYXVsdCJdKShwYWdlRGF0YVVybCkudGhlbihmdW5jdGlvbigpe3JldHVybigvLyBUaGlzIHdhcyBqdXN0IHByZWZldGNoZWQsIHNvIHdpbGwgcmV0dXJuIGEgcmVzcG9uc2UgZnJvbQovLyB0aGUgY2FjaGUgaW5zdGVhZCBvZiBtYWtpbmcgYW5vdGhlciByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIKX3RoaXM0LmxvYWRQYWdlRGF0YUpzb24ocGFnZVBhdGgpKTt9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7aWYocmVzdWx0LnN0YXR1cyE9PSJzdWNjZXNzIil7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO312YXIgcGFnZURhdGE9cmVzdWx0LnBheWxvYWQ7dmFyIGNodW5rTmFtZT1wYWdlRGF0YS5jb21wb25lbnRDaHVua05hbWU7dmFyIGNvbXBvbmVudFVybHM9Y3JlYXRlQ29tcG9uZW50VXJscyhjaHVua05hbWUpO3JldHVybiBQcm9taXNlLmFsbChjb21wb25lbnRVcmxzLm1hcChfcHJlZmV0Y2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bImRlZmF1bHQiXSkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gcGFnZURhdGE7fSk7fSk7fTsvLyBAdHMtaWdub3JlCl9wcm90bzIuX19yZWFjdHN0YW5kaW5fX3JlZ2VuZXJhdGVCeUV2YWw9ZnVuY3Rpb24gX19yZWFjdHN0YW5kaW5fX3JlZ2VuZXJhdGVCeUV2YWwoa2V5LGNvZGUpey8vIEB0cy1pZ25vcmUKdGhpc1trZXldPWV2YWwoY29kZSk7fTtyZXR1cm4gUHJvZExvYWRlcjt9KEJhc2VMb2FkZXIpO3ZhciBpbnN0YW5jZTt2YXIgc2V0TG9hZGVyPWZ1bmN0aW9uIHNldExvYWRlcihfbG9hZGVyKXtpbnN0YW5jZT1fbG9hZGVyO307dmFyIHB1YmxpY0xvYWRlcj17Ly8gRGVwcmVjYXRlZCBtZXRob2RzLiBBcyBmYXIgYXMgd2UncmUgYXdhcmUsIHRoZXNlIGFyZSBvbmx5IHVzZWQgYnkKLy8gY29yZSBnYXRzYnkgYW5kIHRoZSBvZmZsaW5lIHBsdWdpbiwgaG93ZXZlciB0aGVyZSdzIGEgdmVyeSBzbWFsbAovLyBjaGFuY2UgdGhleSdyZSBjYWxsZWQgYnkgb3RoZXJzLgpnZXRSZXNvdXJjZXNGb3JQYXRobmFtZTpmdW5jdGlvbiBnZXRSZXNvdXJjZXNGb3JQYXRobmFtZShyYXdQYXRoKXtjb25zb2xlLndhcm4oIldhcm5pbmc6IGdldFJlc291cmNlc0ZvclBhdGhuYW1lIGlzIGRlcHJlY2F0ZWQuIFVzZSBsb2FkUGFnZSBpbnN0ZWFkIik7cmV0dXJuIGluc3RhbmNlLmkubG9hZFBhZ2UocmF3UGF0aCk7fSxnZXRSZXNvdXJjZXNGb3JQYXRobmFtZVN5bmM6ZnVuY3Rpb24gZ2V0UmVzb3VyY2VzRm9yUGF0aG5hbWVTeW5jKHJhd1BhdGgpe2NvbnNvbGUud2FybigiV2FybmluZzogZ2V0UmVzb3VyY2VzRm9yUGF0aG5hbWVTeW5jIGlzIGRlcHJlY2F0ZWQuIFVzZSBsb2FkUGFnZVN5bmMgaW5zdGVhZCIpO3JldHVybiBpbnN0YW5jZS5pLmxvYWRQYWdlU3luYyhyYXdQYXRoKTt9LGVucXVldWU6ZnVuY3Rpb24gZW5xdWV1ZShyYXdQYXRoKXtyZXR1cm4gaW5zdGFuY2UucHJlZmV0Y2gocmF3UGF0aCk7fSwvLyBSZWFsIG1ldGhvZHMKZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWU6ZnVuY3Rpb24gZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUocmF3UGF0aCl7cmV0dXJuIGluc3RhbmNlLmdldFJlc291cmNlVVJMc0ZvclBhdGhuYW1lKHJhd1BhdGgpO30sbG9hZFBhZ2U6ZnVuY3Rpb24gbG9hZFBhZ2UocmF3UGF0aCl7cmV0dXJuIGluc3RhbmNlLmxvYWRQYWdlKHJhd1BhdGgpO30sbG9hZFBhZ2VTeW5jOmZ1bmN0aW9uIGxvYWRQYWdlU3luYyhyYXdQYXRoKXtyZXR1cm4gaW5zdGFuY2UubG9hZFBhZ2VTeW5jKHJhd1BhdGgpO30scHJlZmV0Y2g6ZnVuY3Rpb24gcHJlZmV0Y2gocmF3UGF0aCl7cmV0dXJuIGluc3RhbmNlLnByZWZldGNoKHJhd1BhdGgpO30saXNQYWdlTm90Rm91bmQ6ZnVuY3Rpb24gaXNQYWdlTm90Rm91bmQocmF3UGF0aCl7cmV0dXJuIGluc3RhbmNlLmlzUGFnZU5vdEZvdW5kKHJhd1BhdGgpO30saG92ZXJpbmc6ZnVuY3Rpb24gaG92ZXJpbmcocmF3UGF0aCl7cmV0dXJuIGluc3RhbmNlLmhvdmVyaW5nKHJhd1BhdGgpO319O3ZhciBfZGVmYXVsdD1wdWJsaWNMb2FkZXI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fWyJkZWZhdWx0Il0gPSAoX2RlZmF1bHQpOzsoZnVuY3Rpb24oKXt2YXIgcmVhY3RIb3RMb2FkZXI9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdDp1bmRlZmluZWQ7aWYoIXJlYWN0SG90TG9hZGVyKXtyZXR1cm47fXJlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKHByZWZlckRlZmF1bHQsInByZWZlckRlZmF1bHQiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2xvYWRlci5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKHN0cmlwU3Vycm91bmRpbmdTbGFzaGVzLCJzdHJpcFN1cnJvdW5kaW5nU2xhc2hlcyIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbG9hZGVyLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoY3JlYXRlUGFnZURhdGFVcmwsImNyZWF0ZVBhZ2VEYXRhVXJsIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9sb2FkZXIuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3Rlcihkb0ZldGNoLCJkb0ZldGNoIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9sb2FkZXIuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihfbG9hZFBhZ2VEYXRhSnNvbiwibG9hZFBhZ2VEYXRhSnNvbiIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbG9hZGVyLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoZG9lc0Nvbm5lY3Rpb25TdXBwb3J0UHJlZmV0Y2gsImRvZXNDb25uZWN0aW9uU3VwcG9ydFByZWZldGNoIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9sb2FkZXIuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3Rlcih0b1BhZ2VSZXNvdXJjZXMsInRvUGFnZVJlc291cmNlcyIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbG9hZGVyLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoQmFzZUxvYWRlciwiQmFzZUxvYWRlciIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbG9hZGVyLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoY3JlYXRlQ29tcG9uZW50VXJscywiY3JlYXRlQ29tcG9uZW50VXJscyIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbG9hZGVyLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoUHJvZExvYWRlciwiUHJvZExvYWRlciIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbG9hZGVyLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoaW5zdGFuY2UsImluc3RhbmNlIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9sb2FkZXIuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihzZXRMb2FkZXIsInNldExvYWRlciIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbG9hZGVyLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIocHVibGljTG9hZGVyLCJwdWJsaWNMb2FkZXIiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL2xvYWRlci5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKF9kZWZhdWx0LCJkZWZhdWx0IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9sb2FkZXIuanMiKTt9KSgpOzsoZnVuY3Rpb24oKXt2YXIgbGVhdmVNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwubGVhdmVNb2R1bGU6dW5kZWZpbmVkO2xlYXZlTW9kdWxlJiZsZWF2ZU1vZHVsZShtb2R1bGUpO30pKCk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbCh0aGlzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLy4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMgKi8gIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIpKG1vZHVsZSkpKQoKLyoqKi8gfSksCgovKioqLyAiLi8uY2FjaGUvbWF0Y2gtcGF0aHMuanNvbiI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvbWF0Y2gtcGF0aHMuanNvbiAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkgewoKbW9kdWxlLmV4cG9ydHMgPSBKU09OLnBhcnNlKCJbXSIpOwoKLyoqKi8gfSksCgovKioqLyAiLi8uY2FjaGUvbmF2aWdhdGlvbi5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvbmF2aWdhdGlvbi5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGluaXQsIHNob3VsZFVwZGF0ZVNjcm9sbCwgUm91dGVVcGRhdGVzICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaW5pdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5pdDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNob3VsZFVwZGF0ZVNjcm9sbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2hvdWxkVXBkYXRlU2Nyb2xsOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUm91dGVVcGRhdGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSb3V0ZVVwZGF0ZXM7IH0pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19lc21faW5oZXJpdHNMb29zZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSAqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9yZWdleHBfcmVwbGFjZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZSAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9yZWdleHBfcmVwbGFjZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lczZfcmVnZXhwX3JlcGxhY2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcHJvcC10eXBlcyAqLyAiLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xvYWRlciAqLyAiLi8uY2FjaGUvbG9hZGVyLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmVkaXJlY3RzX2pzb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmVkaXJlY3RzLmpzb24gKi8gIi4vLmNhY2hlL3JlZGlyZWN0cy5qc29uIik7CnZhciBfcmVkaXJlY3RzX2pzb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy50KC8qISAuL3JlZGlyZWN0cy5qc29uICovICIuLy5jYWNoZS9yZWRpcmVjdHMuanNvbiIsIDEpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FwaV9ydW5uZXJfYnJvd3Nlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcGktcnVubmVyLWJyb3dzZXIgKi8gIi4vLmNhY2hlL2FwaS1ydW5uZXItYnJvd3Nlci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FwaV9ydW5uZXJfYnJvd3Nlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9hcGlfcnVubmVyX2Jyb3dzZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lbWl0dGVyICovICIuLy5jYWNoZS9lbWl0dGVyLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmVhY2hfcm91dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAcmVhY2gvcm91dGVyICovICIuL25vZGVfbW9kdWxlcy9AcmVhY2gvcm91dGVyL2VzL2luZGV4LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBnYXRzYnlfbGlua19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgZ2F0c2J5LWxpbmsgKi8gIi4vbm9kZV9tb2R1bGVzL2dhdHNieS1saW5rL2luZGV4LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBnYXRzYnlfbGlua19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGdhdHNieV9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18pOwooZnVuY3Rpb24oKXt2YXIgZW50ZXJNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZW50ZXJNb2R1bGU6dW5kZWZpbmVkO2VudGVyTW9kdWxlJiZlbnRlck1vZHVsZShtb2R1bGUpO30pKCk7dmFyIF9fc2lnbmF0dXJlX189dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdC5zaWduYXR1cmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE7fTsvLyBDb252ZXJ0IHRvIGEgbWFwIGZvciBmYXN0ZXIgbG9va3VwIGluIG1heWJlUmVkaXJlY3QoKQp2YXIgcmVkaXJlY3RNYXA9X3JlZGlyZWN0c19qc29uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18ucmVkdWNlKGZ1bmN0aW9uKG1hcCxyZWRpcmVjdCl7bWFwW3JlZGlyZWN0LmZyb21QYXRoXT1yZWRpcmVjdDtyZXR1cm4gbWFwO30se30pO2Z1bmN0aW9uIG1heWJlUmVkaXJlY3QocGF0aG5hbWUpe3ZhciByZWRpcmVjdD1yZWRpcmVjdE1hcFtwYXRobmFtZV07aWYocmVkaXJlY3QhPW51bGwpe2lmKHRydWUpe3ZhciBwYWdlUmVzb3VyY2VzPV9sb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siZGVmYXVsdCJdLmxvYWRQYWdlU3luYyhwYXRobmFtZSk7aWYocGFnZVJlc291cmNlcyE9bnVsbCl7Y29uc29sZS5lcnJvcigiVGhlIHJvdXRlIFwiIitwYXRobmFtZSsiXCIgbWF0Y2hlcyBib3RoIGEgcGFnZSBhbmQgYSByZWRpcmVjdDsgdGhpcyBpcyBwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuIik7fX13aW5kb3cuX19fcmVwbGFjZShyZWRpcmVjdC50b1BhdGgpO3JldHVybiB0cnVlO31lbHNle3JldHVybiBmYWxzZTt9fXZhciBvblByZVJvdXRlVXBkYXRlPWZ1bmN0aW9uIG9uUHJlUm91dGVVcGRhdGUobG9jYXRpb24scHJldkxvY2F0aW9uKXtpZighbWF5YmVSZWRpcmVjdChsb2NhdGlvbi5wYXRobmFtZSkpe09iamVjdChfYXBpX3J1bm5lcl9icm93c2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bImFwaVJ1bm5lciJdKSgib25QcmVSb3V0ZVVwZGF0ZSIse2xvY2F0aW9uOmxvY2F0aW9uLHByZXZMb2NhdGlvbjpwcmV2TG9jYXRpb259KTt9fTt2YXIgb25Sb3V0ZVVwZGF0ZT1mdW5jdGlvbiBvblJvdXRlVXBkYXRlKGxvY2F0aW9uLHByZXZMb2NhdGlvbil7aWYoIW1heWJlUmVkaXJlY3QobG9jYXRpb24ucGF0aG5hbWUpKXtPYmplY3QoX2FwaV9ydW5uZXJfYnJvd3Nlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJhcGlSdW5uZXIiXSkoIm9uUm91dGVVcGRhdGUiLHtsb2NhdGlvbjpsb2NhdGlvbixwcmV2TG9jYXRpb246cHJldkxvY2F0aW9ufSk7Ly8gVGVtcCBoYWNrIHdoaWxlIGF3YWl0aW5nIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjaC9yb3V0ZXIvaXNzdWVzLzExOQp3aW5kb3cuX19uYXZpZ2F0aW5nVG9MaW5rPWZhbHNlO319O3ZhciBuYXZpZ2F0ZT1mdW5jdGlvbiBuYXZpZ2F0ZSh0byxvcHRpb25zKXtpZihvcHRpb25zPT09dm9pZCAwKXtvcHRpb25zPXt9O30vLyBUZW1wIGhhY2sgd2hpbGUgYXdhaXRpbmcgaHR0cHM6Ly9naXRodWIuY29tL3JlYWNoL3JvdXRlci9pc3N1ZXMvMTE5CmlmKCFvcHRpb25zLnJlcGxhY2Upe3dpbmRvdy5fX25hdmlnYXRpbmdUb0xpbms9dHJ1ZTt9dmFyIF9wYXJzZVBhdGg9T2JqZWN0KGdhdHNieV9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bInBhcnNlUGF0aCJdKSh0bykscGF0aG5hbWU9X3BhcnNlUGF0aC5wYXRobmFtZTt2YXIgcmVkaXJlY3Q9cmVkaXJlY3RNYXBbcGF0aG5hbWVdOy8vIElmIHdlJ3JlIHJlZGlyZWN0aW5nLCBqdXN0IHJlcGxhY2UgdGhlIHBhc3NlZCBpbiBwYXRobmFtZQovLyB0byB0aGUgb25lIHdlIHdhbnQgdG8gcmVkaXJlY3QgdG8uCmlmKHJlZGlyZWN0KXt0bz1yZWRpcmVjdC50b1BhdGg7cGF0aG5hbWU9T2JqZWN0KGdhdHNieV9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bInBhcnNlUGF0aCJdKSh0bykucGF0aG5hbWU7fS8vIElmIHdlIGhhZCBhIHNlcnZpY2Ugd29ya2VyIHVwZGF0ZSwgbm8gbWF0dGVyIHRoZSBwYXRoLCByZWxvYWQgd2luZG93IGFuZAovLyByZXNldCB0aGUgcGF0aG5hbWUgd2hpdGVsaXN0CmlmKHdpbmRvdy5fX19zd1VwZGF0ZWQpe3dpbmRvdy5sb2NhdGlvbj1wYXRobmFtZTtyZXR1cm47fS8vIFN0YXJ0IGEgdGltZXIgdG8gd2FpdCBmb3IgYSBzZWNvbmQgYmVmb3JlIHRyYW5zaXRpb25pbmcgYW5kIHNob3dpbmcgYQovLyBsb2FkZXIgaW4gY2FzZSByZXNvdXJjZXMgYXJlbid0IGFyb3VuZCB5ZXQuCnZhciB0aW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe19lbWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bImRlZmF1bHQiXS5lbWl0KCJvbkRlbGF5ZWRMb2FkUGFnZVJlc291cmNlcyIse3BhdGhuYW1lOnBhdGhuYW1lfSk7T2JqZWN0KF9hcGlfcnVubmVyX2Jyb3dzZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siYXBpUnVubmVyIl0pKCJvblJvdXRlVXBkYXRlRGVsYXllZCIse2xvY2F0aW9uOndpbmRvdy5sb2NhdGlvbn0pO30sMTAwMCk7X2xvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJkZWZhdWx0Il0ubG9hZFBhZ2UocGF0aG5hbWUpLnRoZW4oZnVuY3Rpb24ocGFnZVJlc291cmNlcyl7Ly8gSWYgbm8gcGFnZSByZXNvdXJjZXMsIHRoZW4gcmVmcmVzaCB0aGUgcGFnZQovLyBEbyB0aGlzLCByYXRoZXIgdGhhbiBzaW1wbHkgYHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKWAsIHNvIHRoYXQKLy8gcHJlc3NpbmcgdGhlIGJhY2svZm9yd2FyZCBidXR0b25zIHdvcmsgLSBvdGhlcndpc2Ugd2hlbiBwcmVzc2luZwovLyBiYWNrLCB0aGUgYnJvd3NlciB3aWxsIGp1c3QgY2hhbmdlIHRoZSBVUkwgYW5kIGV4cGVjdCBKUyB0byBoYW5kbGUKLy8gdGhlIGNoYW5nZSwgd2hpY2ggd29uJ3QgYWx3YXlzIHdvcmsgc2luY2UgaXQgbWlnaHQgbm90IGJlIGEgR2F0c2J5Ci8vIHBhZ2UuCmlmKCFwYWdlUmVzb3VyY2VzfHxwYWdlUmVzb3VyY2VzLnN0YXR1cz09PSJlcnJvciIpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwiIixsb2NhdGlvbi5ocmVmKTt3aW5kb3cubG9jYXRpb249cGF0aG5hbWU7fS8vIElmIHRoZSBsb2FkZWQgcGFnZSBoYXMgYSBkaWZmZXJlbnQgY29tcGlsYXRpb24gaGFzaCB0byB0aGUKLy8gd2luZG93LCB0aGVuIGEgcmVidWlsZCBoYXMgb2NjdXJyZWQgb24gdGhlIHNlcnZlci4gUmVsb2FkLgppZihmYWxzZSl7fU9iamVjdChfcmVhY2hfcm91dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIm5hdmlnYXRlIl0pKHRvLG9wdGlvbnMpO2NsZWFyVGltZW91dCh0aW1lb3V0SWQpO30pO307ZnVuY3Rpb24gc2hvdWxkVXBkYXRlU2Nyb2xsKHByZXZSb3V0ZXJQcm9wcyxfcmVmKXt2YXIgX3RoaXM9dGhpczt2YXIgbG9jYXRpb249X3JlZi5sb2NhdGlvbjt2YXIgcGF0aG5hbWU9bG9jYXRpb24ucGF0aG5hbWUsaGFzaD1sb2NhdGlvbi5oYXNoO3ZhciByZXN1bHRzPU9iamVjdChfYXBpX3J1bm5lcl9icm93c2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bImFwaVJ1bm5lciJdKSgic2hvdWxkVXBkYXRlU2Nyb2xsIix7cHJldlJvdXRlclByb3BzOnByZXZSb3V0ZXJQcm9wcywvLyBgcGF0aG5hbWVgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQpwYXRobmFtZTpwYXRobmFtZSxyb3V0ZXJQcm9wczp7bG9jYXRpb246bG9jYXRpb259LGdldFNhdmVkU2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24gZ2V0U2F2ZWRTY3JvbGxQb3NpdGlvbihhcmdzKXtyZXR1cm4gX3RoaXMuX3N0YXRlU3RvcmFnZS5yZWFkKGFyZ3MpO319KTtpZihyZXN1bHRzLmxlbmd0aD4wKXsvLyBVc2UgdGhlIGxhdGVzdCByZWdpc3RlcmVkIHNob3VsZFVwZGF0ZVNjcm9sbCByZXN1bHQsIHRoaXMgYWxsb3dzIHVzZXJzIHRvIG92ZXJyaWRlIHBsdWdpbidzIGNvbmZpZ3VyYXRpb24KLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2F0c2J5anMvZ2F0c2J5L2lzc3Vlcy8xMjAzOApyZXR1cm4gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aC0xXTt9aWYocHJldlJvdXRlclByb3BzKXt2YXIgb2xkUGF0aG5hbWU9cHJldlJvdXRlclByb3BzLmxvY2F0aW9uLnBhdGhuYW1lO2lmKG9sZFBhdGhuYW1lPT09cGF0aG5hbWUpey8vIFNjcm9sbCB0byBlbGVtZW50IGlmIGl0IGV4aXN0cywgaWYgaXQgZG9lc24ndCwgb3Igbm8gaGFzaCBpcyBwcm92aWRlZCwKLy8gc2Nyb2xsIHRvIHRvcC4KcmV0dXJuIGhhc2g/aGFzaC5zbGljZSgxKTpbMCwwXTt9fXJldHVybiB0cnVlO31mdW5jdGlvbiBpbml0KCl7Ly8gVGVtcCBoYWNrIHdoaWxlIGF3YWl0aW5nIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjaC9yb3V0ZXIvaXNzdWVzLzExOQp3aW5kb3cuX19uYXZpZ2F0aW5nVG9MaW5rPWZhbHNlO3dpbmRvdy5fX19wdXNoPWZ1bmN0aW9uKHRvKXtyZXR1cm4gbmF2aWdhdGUodG8se3JlcGxhY2U6ZmFsc2V9KTt9O3dpbmRvdy5fX19yZXBsYWNlPWZ1bmN0aW9uKHRvKXtyZXR1cm4gbmF2aWdhdGUodG8se3JlcGxhY2U6dHJ1ZX0pO307d2luZG93Ll9fX25hdmlnYXRlPWZ1bmN0aW9uKHRvLG9wdGlvbnMpe3JldHVybiBuYXZpZ2F0ZSh0byxvcHRpb25zKTt9Oy8vIENoZWNrIGZvciBpbml0aWFsIHBhZ2UtbG9hZCByZWRpcmVjdAptYXliZVJlZGlyZWN0KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7fS8vIEZpcmUgb24oUHJlKVJvdXRlVXBkYXRlIEFQSXMKdmFyIFJvdXRlVXBkYXRlcz0vKiNfX1BVUkVfXyovZnVuY3Rpb24oX1JlYWN0JENvbXBvbmVudCl7T2JqZWN0KF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXNtX2luaGVyaXRzTG9vc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZGVmYXVsdCJdKShSb3V0ZVVwZGF0ZXMsX1JlYWN0JENvbXBvbmVudCk7ZnVuY3Rpb24gUm91dGVVcGRhdGVzKHByb3BzKXt2YXIgX3RoaXMyO190aGlzMj1fUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcyxwcm9wcyl8fHRoaXM7b25QcmVSb3V0ZVVwZGF0ZShwcm9wcy5sb2NhdGlvbixudWxsKTtyZXR1cm4gX3RoaXMyO312YXIgX3Byb3RvPVJvdXRlVXBkYXRlcy5wcm90b3R5cGU7X3Byb3RvLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCl7b25Sb3V0ZVVwZGF0ZSh0aGlzLnByb3BzLmxvY2F0aW9uLG51bGwpO307X3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLHByZXZTdGF0ZSxzaG91bGRGaXJlUm91dGVVcGRhdGUpe2lmKHNob3VsZEZpcmVSb3V0ZVVwZGF0ZSl7b25Sb3V0ZVVwZGF0ZSh0aGlzLnByb3BzLmxvY2F0aW9uLHByZXZQcm9wcy5sb2NhdGlvbik7fX07X3Byb3RvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPWZ1bmN0aW9uIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcyl7aWYodGhpcy5wcm9wcy5sb2NhdGlvbi5wYXRobmFtZSE9PXByZXZQcm9wcy5sb2NhdGlvbi5wYXRobmFtZSl7b25QcmVSb3V0ZVVwZGF0ZSh0aGlzLnByb3BzLmxvY2F0aW9uLHByZXZQcm9wcy5sb2NhdGlvbik7cmV0dXJuIHRydWU7fXJldHVybiBmYWxzZTt9O19wcm90by5yZW5kZXI9ZnVuY3Rpb24gcmVuZGVyKCl7cmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47fTsvLyBAdHMtaWdub3JlCl9wcm90by5fX3JlYWN0c3RhbmRpbl9fcmVnZW5lcmF0ZUJ5RXZhbD1mdW5jdGlvbiBfX3JlYWN0c3RhbmRpbl9fcmVnZW5lcmF0ZUJ5RXZhbChrZXksY29kZSl7Ly8gQHRzLWlnbm9yZQp0aGlzW2tleV09ZXZhbChjb2RlKTt9O3JldHVybiBSb3V0ZVVwZGF0ZXM7fShyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYS5Db21wb25lbnQpO1JvdXRlVXBkYXRlcy5wcm9wVHlwZXM9e2xvY2F0aW9uOnByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0LmEub2JqZWN0LmlzUmVxdWlyZWR9OzsoZnVuY3Rpb24oKXt2YXIgcmVhY3RIb3RMb2FkZXI9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdDp1bmRlZmluZWQ7aWYoIXJlYWN0SG90TG9hZGVyKXtyZXR1cm47fXJlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKHJlZGlyZWN0TWFwLCJyZWRpcmVjdE1hcCIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbmF2aWdhdGlvbi5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKG1heWJlUmVkaXJlY3QsIm1heWJlUmVkaXJlY3QiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL25hdmlnYXRpb24uanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihvblByZVJvdXRlVXBkYXRlLCJvblByZVJvdXRlVXBkYXRlIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9uYXZpZ2F0aW9uLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIob25Sb3V0ZVVwZGF0ZSwib25Sb3V0ZVVwZGF0ZSIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbmF2aWdhdGlvbi5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKG5hdmlnYXRlLCJuYXZpZ2F0ZSIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbmF2aWdhdGlvbi5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKHNob3VsZFVwZGF0ZVNjcm9sbCwic2hvdWxkVXBkYXRlU2Nyb2xsIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9uYXZpZ2F0aW9uLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoaW5pdCwiaW5pdCIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvbmF2aWdhdGlvbi5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKFJvdXRlVXBkYXRlcywiUm91dGVVcGRhdGVzIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9uYXZpZ2F0aW9uLmpzIik7fSkoKTs7KGZ1bmN0aW9uKCl7dmFyIGxlYXZlTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmxlYXZlTW9kdWxlOnVuZGVmaW5lZDtsZWF2ZU1vZHVsZSYmbGVhdmVNb2R1bGUobW9kdWxlKTt9KSgpOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzICovICIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiKShtb2R1bGUpKSkKCi8qKiovIH0pLAoKLyoqKi8gIi4vLmNhY2hlL25vcm1hbGl6ZS1wYWdlLXBhdGguanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vLmNhY2hlL25vcm1hbGl6ZS1wYWdlLXBhdGguanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7KGZ1bmN0aW9uKCl7dmFyIGVudGVyTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmVudGVyTW9kdWxlOnVuZGVmaW5lZDtlbnRlck1vZHVsZSYmZW50ZXJNb2R1bGUobW9kdWxlKTt9KSgpO3ZhciBfX3NpZ25hdHVyZV9fPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQuc2lnbmF0dXJlOmZ1bmN0aW9uKGEpe3JldHVybiBhO307dmFyIF9kZWZhdWx0PWZ1bmN0aW9uIF9kZWZhdWx0KHBhdGgpe2lmKHBhdGg9PT11bmRlZmluZWQpe3JldHVybiBwYXRoO31pZihwYXRoPT09Ii8iKXtyZXR1cm4iLyI7fWlmKHBhdGguY2hhckF0KHBhdGgubGVuZ3RoLTEpPT09Ii8iKXtyZXR1cm4gcGF0aC5zbGljZSgwLC0xKTt9cmV0dXJuIHBhdGg7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bImRlZmF1bHQiXSA9IChfZGVmYXVsdCk7OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoX2RlZmF1bHQsImRlZmF1bHQiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL25vcm1hbGl6ZS1wYWdlLXBhdGguanMiKTt9KSgpOzsoZnVuY3Rpb24oKXt2YXIgbGVhdmVNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwubGVhdmVNb2R1bGU6dW5kZWZpbmVkO2xlYXZlTW9kdWxlJiZsZWF2ZU1vZHVsZShtb2R1bGUpO30pKCk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbCh0aGlzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLy4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMgKi8gIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIpKG1vZHVsZSkpKQoKLyoqKi8gfSksCgovKioqLyAiLi8uY2FjaGUvcGFnZS1yZW5kZXJlci5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvcGFnZS1yZW5kZXJlci5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfYXNzaWduX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24gKi8gIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfYXNzaWduX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzNl9vYmplY3RfYXNzaWduX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19lc21faW5oZXJpdHNMb29zZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSAqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0ICovICIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHByb3AtdHlwZXMgKi8gIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2FkZXIgKi8gIi4vLmNhY2hlL2xvYWRlci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FwaV9ydW5uZXJfYnJvd3Nlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcGktcnVubmVyLWJyb3dzZXIgKi8gIi4vLmNhY2hlL2FwaS1ydW5uZXItYnJvd3Nlci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FwaV9ydW5uZXJfYnJvd3Nlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9hcGlfcnVubmVyX2Jyb3dzZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyk7CihmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9Oy8vIFJlbmRlcnMgcGFnZQp2YXIgUGFnZVJlbmRlcmVyPS8qI19fUFVSRV9fKi9mdW5jdGlvbihfUmVhY3QkQ29tcG9uZW50KXtPYmplY3QoX2JhYmVsX3J1bnRpbWVfaGVscGVyc19lc21faW5oZXJpdHNMb29zZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJkZWZhdWx0Il0pKFBhZ2VSZW5kZXJlcixfUmVhY3QkQ29tcG9uZW50KTtmdW5jdGlvbiBQYWdlUmVuZGVyZXIoKXtyZXR1cm4gX1JlYWN0JENvbXBvbmVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7fXZhciBfcHJvdG89UGFnZVJlbmRlcmVyLnByb3RvdHlwZTtfcHJvdG8ucmVuZGVyPWZ1bmN0aW9uIHJlbmRlcigpe3ZhciBwcm9wcz1PYmplY3QuYXNzaWduKHt9LHRoaXMucHJvcHMse3BhdGhDb250ZXh0OnRoaXMucHJvcHMucGFnZUNvbnRleHR9KTt2YXIgX2FwaVJ1bm5lcj1PYmplY3QoX2FwaV9ydW5uZXJfYnJvd3Nlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJhcGlSdW5uZXIiXSkoInJlcGxhY2VDb21wb25lbnRSZW5kZXJlciIse3Byb3BzOnRoaXMucHJvcHMsbG9hZGVyOl9sb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1sicHVibGljTG9hZGVyIl19KSxyZXBsYWNlbWVudEVsZW1lbnQ9X2FwaVJ1bm5lclswXTt2YXIgcGFnZUVsZW1lbnQ9cmVwbGFjZW1lbnRFbGVtZW50fHxPYmplY3QocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siY3JlYXRlRWxlbWVudCJdKSh0aGlzLnByb3BzLnBhZ2VSZXNvdXJjZXMuY29tcG9uZW50LE9iamVjdC5hc3NpZ24oe30scHJvcHMse2tleTp0aGlzLnByb3BzLnBhdGh8fHRoaXMucHJvcHMucGFnZVJlc291cmNlcy5wYWdlLnBhdGh9KSk7dmFyIHdyYXBwZWRQYWdlPU9iamVjdChfYXBpX3J1bm5lcl9icm93c2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bImFwaVJ1bm5lciJdKSgid3JhcFBhZ2VFbGVtZW50Iix7ZWxlbWVudDpwYWdlRWxlbWVudCxwcm9wczpwcm9wc30scGFnZUVsZW1lbnQsZnVuY3Rpb24oX3JlZil7dmFyIHJlc3VsdD1fcmVmLnJlc3VsdDtyZXR1cm57ZWxlbWVudDpyZXN1bHQscHJvcHM6cHJvcHN9O30pLnBvcCgpO3JldHVybiB3cmFwcGVkUGFnZTt9Oy8vIEB0cy1pZ25vcmUKX3Byb3RvLl9fcmVhY3RzdGFuZGluX19yZWdlbmVyYXRlQnlFdmFsPWZ1bmN0aW9uIF9fcmVhY3RzdGFuZGluX19yZWdlbmVyYXRlQnlFdmFsKGtleSxjb2RlKXsvLyBAdHMtaWdub3JlCnRoaXNba2V5XT1ldmFsKGNvZGUpO307cmV0dXJuIFBhZ2VSZW5kZXJlcjt9KHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLkNvbXBvbmVudCk7UGFnZVJlbmRlcmVyLnByb3BUeXBlcz17bG9jYXRpb246cHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQuYS5vYmplY3QuaXNSZXF1aXJlZCxwYWdlUmVzb3VyY2VzOnByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0LmEub2JqZWN0LmlzUmVxdWlyZWQsZGF0YTpwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdC5hLm9iamVjdCxwYWdlQ29udGV4dDpwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdC5hLm9iamVjdC5pc1JlcXVpcmVkfTt2YXIgX2RlZmF1bHQ9UGFnZVJlbmRlcmVyOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gKF9kZWZhdWx0KTs7KGZ1bmN0aW9uKCl7dmFyIHJlYWN0SG90TG9hZGVyPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQ6dW5kZWZpbmVkO2lmKCFyZWFjdEhvdExvYWRlcil7cmV0dXJuO31yZWFjdEhvdExvYWRlci5yZWdpc3RlcihQYWdlUmVuZGVyZXIsIlBhZ2VSZW5kZXJlciIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvcGFnZS1yZW5kZXJlci5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKF9kZWZhdWx0LCJkZWZhdWx0IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9wYWdlLXJlbmRlcmVyLmpzIik7fSkoKTs7KGZ1bmN0aW9uKCl7dmFyIGxlYXZlTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmxlYXZlTW9kdWxlOnVuZGVmaW5lZDtsZWF2ZU1vZHVsZSYmbGVhdmVNb2R1bGUobW9kdWxlKTt9KSgpOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzICovICIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiKShtb2R1bGUpKSkKCi8qKiovIH0pLAoKLyoqKi8gIi4vLmNhY2hlL3ByZWZldGNoLmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvcHJlZmV0Y2guanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X3Byb21pc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZSAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X3Byb21pc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X3Byb21pc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF90b19zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZyAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF90b19zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF90b19zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7CihmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9O3ZhciBzdXBwb3J0PWZ1bmN0aW9uIHN1cHBvcnQoZmVhdHVyZSl7aWYodHlwZW9mIGRvY3VtZW50PT09InVuZGVmaW5lZCIpe3JldHVybiBmYWxzZTt9dmFyIGZha2VMaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTt0cnl7aWYoZmFrZUxpbmsucmVsTGlzdCYmdHlwZW9mIGZha2VMaW5rLnJlbExpc3Quc3VwcG9ydHM9PT0iZnVuY3Rpb24iKXtyZXR1cm4gZmFrZUxpbmsucmVsTGlzdC5zdXBwb3J0cyhmZWF0dXJlKTt9fWNhdGNoKGVycil7cmV0dXJuIGZhbHNlO31yZXR1cm4gZmFsc2U7fTt2YXIgbGlua1ByZWZldGNoU3RyYXRlZ3k9ZnVuY3Rpb24gbGlua1ByZWZldGNoU3RyYXRlZ3kodXJsKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3Qpe2lmKHR5cGVvZiBkb2N1bWVudD09PSJ1bmRlZmluZWQiKXtyZWplY3QoKTtyZXR1cm47fXZhciBsaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtsaW5rLnNldEF0dHJpYnV0ZSgicmVsIiwicHJlZmV0Y2giKTtsaW5rLnNldEF0dHJpYnV0ZSgiaHJlZiIsdXJsKTtsaW5rLm9ubG9hZD1yZXNvbHZlO2xpbmsub25lcnJvcj1yZWplY3Q7dmFyIHBhcmVudEVsZW1lbnQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoInNjcmlwdCIpWzBdLnBhcmVudE5vZGU7cGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChsaW5rKTt9KTt9O3ZhciB4aHJQcmVmZXRjaFN0cmF0ZWd5PWZ1bmN0aW9uIHhoclByZWZldGNoU3RyYXRlZ3kodXJsKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3Qpe3ZhciByZXE9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7cmVxLm9wZW4oIkdFVCIsdXJsLHRydWUpO3JlcS5vbmxvYWQ9ZnVuY3Rpb24oKXtpZihyZXEuc3RhdHVzPT09MjAwKXtyZXNvbHZlKCk7fWVsc2V7cmVqZWN0KCk7fX07cmVxLnNlbmQobnVsbCk7fSk7fTt2YXIgc3VwcG9ydGVkUHJlZmV0Y2hTdHJhdGVneT1zdXBwb3J0KCJwcmVmZXRjaCIpP2xpbmtQcmVmZXRjaFN0cmF0ZWd5OnhoclByZWZldGNoU3RyYXRlZ3k7dmFyIHByZUZldGNoZWQ9e307dmFyIHByZWZldGNoPWZ1bmN0aW9uIHByZWZldGNoKHVybCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpe2lmKHByZUZldGNoZWRbdXJsXSl7cmVzb2x2ZSgpO3JldHVybjt9c3VwcG9ydGVkUHJlZmV0Y2hTdHJhdGVneSh1cmwpLnRoZW4oZnVuY3Rpb24oKXtyZXNvbHZlKCk7cHJlRmV0Y2hlZFt1cmxdPXRydWU7fSkuY2F0Y2goZnVuY3Rpb24oKXt9KTsvLyA0MDRzIGFyZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgYW55d2F5Cn0pO307dmFyIF9kZWZhdWx0PXByZWZldGNoOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gKF9kZWZhdWx0KTs7KGZ1bmN0aW9uKCl7dmFyIHJlYWN0SG90TG9hZGVyPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQ6dW5kZWZpbmVkO2lmKCFyZWFjdEhvdExvYWRlcil7cmV0dXJuO31yZWFjdEhvdExvYWRlci5yZWdpc3RlcihzdXBwb3J0LCJzdXBwb3J0IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9wcmVmZXRjaC5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKGxpbmtQcmVmZXRjaFN0cmF0ZWd5LCJsaW5rUHJlZmV0Y2hTdHJhdGVneSIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvcHJlZmV0Y2guanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3Rlcih4aHJQcmVmZXRjaFN0cmF0ZWd5LCJ4aHJQcmVmZXRjaFN0cmF0ZWd5IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9wcmVmZXRjaC5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKHN1cHBvcnRlZFByZWZldGNoU3RyYXRlZ3ksInN1cHBvcnRlZFByZWZldGNoU3RyYXRlZ3kiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3ByZWZldGNoLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIocHJlRmV0Y2hlZCwicHJlRmV0Y2hlZCIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvcHJlZmV0Y2guanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihwcmVmZXRjaCwicHJlZmV0Y2giLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3ByZWZldGNoLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoX2RlZmF1bHQsImRlZmF1bHQiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3ByZWZldGNoLmpzIik7fSkoKTs7KGZ1bmN0aW9uKCl7dmFyIGxlYXZlTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmxlYXZlTW9kdWxlOnVuZGVmaW5lZDtsZWF2ZU1vZHVsZSYmbGVhdmVNb2R1bGUobW9kdWxlKTt9KSgpOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzICovICIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiKShtb2R1bGUpKSkKCi8qKiovIH0pLAoKLyoqKi8gIi4vLmNhY2hlL3B1YmxpYy1wYWdlLXJlbmRlcmVyLWRldi5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuLy5jYWNoZS9wdWJsaWMtcGFnZS1yZW5kZXJlci1kZXYuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0ICovICIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHByb3AtdHlwZXMgKi8gIi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2FkZXIgKi8gIi4vLmNhY2hlL2xvYWRlci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25fc3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbi1zdG9yZSAqLyAiLi8uY2FjaGUvanNvbi1zdG9yZS5qcyIpOwooZnVuY3Rpb24oKXt2YXIgZW50ZXJNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZW50ZXJNb2R1bGU6dW5kZWZpbmVkO2VudGVyTW9kdWxlJiZlbnRlck1vZHVsZShtb2R1bGUpO30pKCk7dmFyIF9fc2lnbmF0dXJlX189dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdC5zaWduYXR1cmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE7fTt2YXIgRGV2UGFnZVJlbmRlcmVyPWZ1bmN0aW9uIERldlBhZ2VSZW5kZXJlcihfcmVmKXt2YXIgbG9jYXRpb249X3JlZi5sb2NhdGlvbjt2YXIgcGFnZVJlc291cmNlcz1fbG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImRlZmF1bHQiXS5sb2FkUGFnZVN5bmMobG9jYXRpb24ucGF0aG5hbWUpO3JldHVybiByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9qc29uX3N0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bImRlZmF1bHQiXSx7bG9jYXRpb246bG9jYXRpb24scGFnZVJlc291cmNlczpwYWdlUmVzb3VyY2VzfSk7fTtEZXZQYWdlUmVuZGVyZXIucHJvcFR5cGVzPXtsb2NhdGlvbjpwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnNoYXBlKHtwYXRobmFtZTpwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN0cmluZy5pc1JlcXVpcmVkfSkuaXNSZXF1aXJlZH07dmFyIF9kZWZhdWx0PURldlBhZ2VSZW5kZXJlcjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bImRlZmF1bHQiXSA9IChfZGVmYXVsdCk7OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoRGV2UGFnZVJlbmRlcmVyLCJEZXZQYWdlUmVuZGVyZXIiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3B1YmxpYy1wYWdlLXJlbmRlcmVyLWRldi5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKF9kZWZhdWx0LCJkZWZhdWx0IiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9wdWJsaWMtcGFnZS1yZW5kZXJlci1kZXYuanMiKTt9KSgpOzsoZnVuY3Rpb24oKXt2YXIgbGVhdmVNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwubGVhdmVNb2R1bGU6dW5kZWZpbmVkO2xlYXZlTW9kdWxlJiZsZWF2ZU1vZHVsZShtb2R1bGUpO30pKCk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbCh0aGlzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLy4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMgKi8gIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIpKG1vZHVsZSkpKQoKLyoqKi8gfSksCgovKioqLyAiLi8uY2FjaGUvcHVibGljLXBhZ2UtcmVuZGVyZXIuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuLy5jYWNoZS9wdWJsaWMtcGFnZS1yZW5kZXJlci5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7KGZ1bmN0aW9uKCl7dmFyIGVudGVyTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmVudGVyTW9kdWxlOnVuZGVmaW5lZDtlbnRlck1vZHVsZSYmZW50ZXJNb2R1bGUobW9kdWxlKTt9KSgpO3ZhciBfX3NpZ25hdHVyZV9fPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQuc2lnbmF0dXJlOmZ1bmN0aW9uKGEpe3JldHVybiBhO307dmFyIHByZWZlckRlZmF1bHQ9ZnVuY3Rpb24gcHJlZmVyRGVmYXVsdChtKXtyZXR1cm4gbSYmbS5kZWZhdWx0fHxtO307aWYodHJ1ZSl7bW9kdWxlLmV4cG9ydHM9cHJlZmVyRGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3B1YmxpYy1wYWdlLXJlbmRlcmVyLWRldiAqLyAiLi8uY2FjaGUvcHVibGljLXBhZ2UtcmVuZGVyZXItZGV2LmpzIikpO31lbHNlIHt9OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIocHJlZmVyRGVmYXVsdCwicHJlZmVyRGVmYXVsdCIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvcHVibGljLXBhZ2UtcmVuZGVyZXIuanMiKTt9KSgpOzsoZnVuY3Rpb24oKXt2YXIgbGVhdmVNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwubGVhdmVNb2R1bGU6dW5kZWZpbmVkO2xlYXZlTW9kdWxlJiZsZWF2ZU1vZHVsZShtb2R1bGUpO30pKCk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbCh0aGlzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLy4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzICovICIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikobW9kdWxlKSkpCgovKioqLyB9KSwKCi8qKiovICIuLy5jYWNoZS9yZWFjdC1saWZlY3ljbGVzLWNvbXBhdC5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vLmNhY2hlL3JlYWN0LWxpZmVjeWNsZXMtY29tcGF0LmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKCnZhciBfX3NpZ25hdHVyZV9fPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQuc2lnbmF0dXJlOmZ1bmN0aW9uKGEpe3JldHVybiBhO307ZXhwb3J0cy5wb2x5ZmlsbD1mdW5jdGlvbihDb21wb25lbnQpe3JldHVybiBDb21wb25lbnQ7fTsKCi8qKiovIH0pLAoKLyoqKi8gIi4vLmNhY2hlL3JlZGlyZWN0cy5qc29uIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvcmVkaXJlY3RzLmpzb24gKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7Cgptb2R1bGUuZXhwb3J0cyA9IEpTT04ucGFyc2UoIltdIik7CgovKioqLyB9KSwKCi8qKiovICIuLy5jYWNoZS9yb290LmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuLy5jYWNoZS9yb290LmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2VzbV9pbmhlcml0c0xvb3NlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlICovICIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF9hc3NpZ25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbiAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF9hc3NpZ25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF9hc3NpZ25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gIi4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JlYWNoX3JvdXRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQHJlYWNoL3JvdXRlciAqLyAiLi9ub2RlX21vZHVsZXMvQHJlYWNoL3JvdXRlci9lcy9pbmRleC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgZ2F0c2J5X3JlYWN0X3JvdXRlcl9zY3JvbGxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGdhdHNieS1yZWFjdC1yb3V0ZXItc2Nyb2xsICovICIuL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC9pbmRleC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgZ2F0c2J5X3JlYWN0X3JvdXRlcl9zY3JvbGxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihnYXRzYnlfcmVhY3Rfcm91dGVyX3Njcm9sbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9uYXZpZ2F0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25hdmlnYXRpb24gKi8gIi4vLmNhY2hlL25hdmlnYXRpb24uanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcGlfcnVubmVyX2Jyb3dzZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXBpLXJ1bm5lci1icm93c2VyICovICIuLy5jYWNoZS9hcGktcnVubmVyLWJyb3dzZXIuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcGlfcnVubmVyX2Jyb3dzZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfYXBpX3J1bm5lcl9icm93c2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2FkZXIgKi8gIi4vLmNhY2hlL2xvYWRlci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25fc3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbi1zdG9yZSAqLyAiLi8uY2FjaGUvanNvbi1zdG9yZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vuc3VyZV9yZXNvdXJjZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZW5zdXJlLXJlc291cmNlcyAqLyAiLi8uY2FjaGUvZW5zdXJlLXJlc291cmNlcy5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX292ZXJsYXlfaGFuZGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZXJyb3Itb3ZlcmxheS1oYW5kbGVyICovICIuLy5jYWNoZS9lcnJvci1vdmVybGF5LWhhbmRsZXIuanMiKTsKdmFyIF9qc3hGaWxlTmFtZT0iL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9yb290LmpzIjsoZnVuY3Rpb24oKXt2YXIgZW50ZXJNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZW50ZXJNb2R1bGU6dW5kZWZpbmVkO2VudGVyTW9kdWxlJiZlbnRlck1vZHVsZShtb2R1bGUpO30pKCk7dmFyIF9fc2lnbmF0dXJlX189dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdC5zaWduYXR1cmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE7fTtpZih3aW5kb3cuX193ZWJwYWNrX2hvdF9taWRkbGV3YXJlX3JlcG9ydGVyX18hPT11bmRlZmluZWQpe3ZhciBvdmVybGF5RXJyb3JJRD0id2VicGFjayI7Ly8gUmVwb3J0IGJ1aWxkIGVycm9ycwp3aW5kb3cuX193ZWJwYWNrX2hvdF9taWRkbGV3YXJlX3JlcG9ydGVyX18udXNlQ3VzdG9tT3ZlcmxheSh7c2hvd1Byb2JsZW1zOmZ1bmN0aW9uIHNob3dQcm9ibGVtcyh0eXBlLG9iail7aWYodHlwZSE9PSJlcnJvcnMiKXtPYmplY3QoX2Vycm9yX292ZXJsYXlfaGFuZGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siY2xlYXJFcnJvciJdKShvdmVybGF5RXJyb3JJRCk7cmV0dXJuO31PYmplY3QoX2Vycm9yX292ZXJsYXlfaGFuZGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1sicmVwb3J0RXJyb3IiXSkob3ZlcmxheUVycm9ySUQsb2JqWzBdKTt9LGNsZWFyOmZ1bmN0aW9uIGNsZWFyKCl7T2JqZWN0KF9lcnJvcl9vdmVybGF5X2hhbmRsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bImNsZWFyRXJyb3IiXSkob3ZlcmxheUVycm9ySUQpO319KTt9T2JqZWN0KF9uYXZpZ2F0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bImluaXQiXSkoKTsvLyBJbiBnYXRzYnkgdjIgaWYgUm91dGVyIGlzIHVzZWQgaW4gcGFnZSB1c2luZyBtYXRjaFBhdGhzCi8vIHBhdGhzIG5lZWQgdG8gY29udGFpbiBmdWxsIHBhdGguCi8vIEZvciBleGFtcGxlOgovLyAgIC0gcGFnZSBoYXZlIGAvYXBwLypgIG1hdGNoUGF0aAovLyAgIC0gaW5zaWRlIHRlbXBsYXRlIHVzZXIgbmVlZHMgdG8gdXNlIGAvYXBwL3h5emAgYXMgcGF0aAovLyBSZXNldHRpbmcgYGJhc2VwYXRoYC9gYmFzZXVyaWAga2VlcHMgY3VycmVudCBiZWhhdmlvdXIKLy8gdG8gbm90IGludHJvZHVjZSBicmVha2luZyBjaGFuZ2UuCi8vIFJlbW92ZSB0aGlzIGluIHYzCnZhciBSb3V0ZUhhbmRsZXI9ZnVuY3Rpb24gUm91dGVIYW5kbGVyKHByb3BzKXtyZXR1cm4gcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfcmVhY2hfcm91dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkJhc2VDb250ZXh0Il0uUHJvdmlkZXIse3ZhbHVlOntiYXNldXJpOiIvIixiYXNlcGF0aDoiLyJ9LF9fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo0NX0sX19zZWxmOnRoaXN9LHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX2pzb25fc3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siZGVmYXVsdCJdLE9iamVjdC5hc3NpZ24oe30scHJvcHMse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo1MX0sX19zZWxmOnRoaXN9KSkpO307dmFyIExvY2F0aW9uSGFuZGxlcj0vKiNfX1BVUkVfXyovZnVuY3Rpb24oX1JlYWN0JENvbXBvbmVudCl7T2JqZWN0KF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXNtX2luaGVyaXRzTG9vc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZGVmYXVsdCJdKShMb2NhdGlvbkhhbmRsZXIsX1JlYWN0JENvbXBvbmVudCk7ZnVuY3Rpb24gTG9jYXRpb25IYW5kbGVyKCl7cmV0dXJuIF9SZWFjdCRDb21wb25lbnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO312YXIgX3Byb3RvPUxvY2F0aW9uSGFuZGxlci5wcm90b3R5cGU7X3Byb3RvLnJlbmRlcj1mdW5jdGlvbiByZW5kZXIoKXt2YXIgX3RoaXM9dGhpczt2YXIgbG9jYXRpb249dGhpcy5wcm9wcy5sb2NhdGlvbjtpZighX2xvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJkZWZhdWx0Il0uaXNQYWdlTm90Rm91bmQobG9jYXRpb24ucGF0aG5hbWUpKXtyZXR1cm4gcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfZW5zdXJlX3Jlc291cmNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJkZWZhdWx0Il0se2xvY2F0aW9uOmxvY2F0aW9uLF9fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo2MX0sX19zZWxmOnRoaXN9LGZ1bmN0aW9uKGxvY2F0aW9uQW5kUGFnZVJlc291cmNlcyl7cmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX25hdmlnYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUm91dGVVcGRhdGVzIl0se2xvY2F0aW9uOmxvY2F0aW9uLF9fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo2M30sX19zZWxmOnRoaXN9LHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoZ2F0c2J5X3JlYWN0X3JvdXRlcl9zY3JvbGxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2Nyb2xsQ29udGV4dCJdLHtsb2NhdGlvbjpsb2NhdGlvbixzaG91bGRVcGRhdGVTY3JvbGw6X25hdmlnYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1sic2hvdWxkVXBkYXRlU2Nyb2xsIl0sX19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjY0fSxfX3NlbGY6dGhpc30scmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfcmVhY2hfcm91dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlJvdXRlciJdLHtiYXNlcGF0aDoiIixsb2NhdGlvbjpsb2NhdGlvbixpZDoiZ2F0c2J5LWZvY3VzLXdyYXBwZXIiLF9fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo2OH0sX19zZWxmOnRoaXN9LHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoUm91dGVIYW5kbGVyLE9iamVjdC5hc3NpZ24oe3BhdGg6ZW5jb2RlVVJJKGxvY2F0aW9uQW5kUGFnZVJlc291cmNlcy5wYWdlUmVzb3VyY2VzLnBhZ2UubWF0Y2hQYXRofHxsb2NhdGlvbkFuZFBhZ2VSZXNvdXJjZXMucGFnZVJlc291cmNlcy5wYWdlLnBhdGgpfSxfdGhpcy5wcm9wcyxsb2NhdGlvbkFuZFBhZ2VSZXNvdXJjZXMse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo3M30sX19zZWxmOnRoaXN9KSkpKSk7fSk7fXZhciBkZXY0MDRQYWdlUmVzb3VyY2VzPV9sb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siZGVmYXVsdCJdLmxvYWRQYWdlU3luYygiL2Rldi00MDQtcGFnZSIpO3ZhciByZWFsNDA0UGFnZVJlc291cmNlcz1fbG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bImRlZmF1bHQiXS5sb2FkUGFnZVN5bmMoIi80MDQuaHRtbCIpO3ZhciBjdXN0b200MDQ7aWYocmVhbDQwNFBhZ2VSZXNvdXJjZXMpe2N1c3RvbTQwND1yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9qc29uX3N0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bImRlZmF1bHQiXSxPYmplY3QuYXNzaWduKHt9LHRoaXMucHJvcHMse3BhZ2VSZXNvdXJjZXM6cmVhbDQwNFBhZ2VSZXNvdXJjZXMsX19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjk0fSxfX3NlbGY6dGhpc30pKTt9cmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX25hdmlnYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUm91dGVVcGRhdGVzIl0se2xvY2F0aW9uOmxvY2F0aW9uLF9fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjo5OX0sX19zZWxmOnRoaXN9LHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX3JlYWNoX3JvdXRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJSb3V0ZXIiXSx7YmFzZXBhdGg6IiIsbG9jYXRpb246bG9jYXRpb24saWQ6ImdhdHNieS1mb2N1cy13cmFwcGVyIixfX3NvdXJjZTp7ZmlsZU5hbWU6X2pzeEZpbGVOYW1lLGxpbmVOdW1iZXI6MTAwfSxfX3NlbGY6dGhpc30scmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChSb3V0ZUhhbmRsZXIse3BhdGg6bG9jYXRpb24ucGF0aG5hbWUsbG9jYXRpb246bG9jYXRpb24scGFnZVJlc291cmNlczpkZXY0MDRQYWdlUmVzb3VyY2VzLGN1c3RvbTQwNDpjdXN0b200MDQsX19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjEwNX0sX19zZWxmOnRoaXN9KSkpO307Ly8gQHRzLWlnbm9yZQpfcHJvdG8uX19yZWFjdHN0YW5kaW5fX3JlZ2VuZXJhdGVCeUV2YWw9ZnVuY3Rpb24gX19yZWFjdHN0YW5kaW5fX3JlZ2VuZXJhdGVCeUV2YWwoa2V5LGNvZGUpey8vIEB0cy1pZ25vcmUKdGhpc1trZXldPWV2YWwoY29kZSk7fTtyZXR1cm4gTG9jYXRpb25IYW5kbGVyO30ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEuQ29tcG9uZW50KTt2YXIgUm9vdD1mdW5jdGlvbiBSb290KCl7cmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX3JlYWNoX3JvdXRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJMb2NhdGlvbiJdLHtfX3NvdXJjZTp7ZmlsZU5hbWU6X2pzeEZpbGVOYW1lLGxpbmVOdW1iZXI6MTE4fSxfX3NlbGY6dGhpc30sZnVuY3Rpb24obG9jYXRpb25Db250ZXh0KXtyZXR1cm4gcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChMb2NhdGlvbkhhbmRsZXIsT2JqZWN0LmFzc2lnbih7fSxsb2NhdGlvbkNvbnRleHQse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjoxMTl9LF9fc2VsZjp0aGlzfSkpO30pO307Ly8gTGV0IHNpdGUsIHBsdWdpbnMgd3JhcCB0aGUgc2l0ZSBlLmcuIGZvciBSZWR1eC4KdmFyIFdyYXBwZWRSb290PU9iamVjdChfYXBpX3J1bm5lcl9icm93c2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bImFwaVJ1bm5lciJdKSgid3JhcFJvb3RFbGVtZW50Iix7ZWxlbWVudDpyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFJvb3Qse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjoxMjZ9LF9fc2VsZjp1bmRlZmluZWR9KX0scmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChSb290LHtfX3NvdXJjZTp7ZmlsZU5hbWU6X2pzeEZpbGVOYW1lLGxpbmVOdW1iZXI6MTI3fSxfX3NlbGY6dW5kZWZpbmVkfSksZnVuY3Rpb24oX3JlZil7dmFyIHJlc3VsdD1fcmVmLnJlc3VsdCxwbHVnaW49X3JlZi5wbHVnaW47cmV0dXJue2VsZW1lbnQ6cmVzdWx0fTt9KS5wb3AoKTt2YXIgX2RlZmF1bHQ9ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm4gV3JhcHBlZFJvb3Q7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bImRlZmF1bHQiXSA9IChfZGVmYXVsdCk7OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoUm91dGVIYW5kbGVyLCJSb3V0ZUhhbmRsZXIiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3Jvb3QuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihMb2NhdGlvbkhhbmRsZXIsIkxvY2F0aW9uSGFuZGxlciIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvcm9vdC5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKFJvb3QsIlJvb3QiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3Jvb3QuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihXcmFwcGVkUm9vdCwiV3JhcHBlZFJvb3QiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3Jvb3QuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihfZGVmYXVsdCwiZGVmYXVsdCIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvcm9vdC5qcyIpO30pKCk7OyhmdW5jdGlvbigpe3ZhciBsZWF2ZU1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5sZWF2ZU1vZHVsZTp1bmRlZmluZWQ7bGVhdmVNb2R1bGUmJmxlYXZlTW9kdWxlKG1vZHVsZSk7fSkoKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyAqLyAiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIikobW9kdWxlKSkpCgovKioqLyB9KSwKCi8qKiovICIuLy5jYWNoZS9zb2NrZXRJby5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vLmNhY2hlL3NvY2tldElvLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGdldFN0YXRpY1F1ZXJ5RGF0YSwgZ2V0UGFnZVF1ZXJ5RGF0YSwgZ2V0SXNJbml0aWFsaXplZCwgZGVmYXVsdCwgZ2V0UGFnZURhdGEsIHJlZ2lzdGVyUGF0aCwgdW5yZWdpc3RlclBhdGggKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnZXRTdGF0aWNRdWVyeURhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFN0YXRpY1F1ZXJ5RGF0YTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImdldFBhZ2VRdWVyeURhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFBhZ2VRdWVyeURhdGE7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnZXRJc0luaXRpYWxpemVkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRJc0luaXRpYWxpemVkOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZGVmYXVsdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc29ja2V0SW87IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnZXRQYWdlRGF0YSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0UGFnZURhdGE7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJyZWdpc3RlclBhdGgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZ2lzdGVyUGF0aDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInVucmVnaXN0ZXJQYXRoIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnJlZ2lzdGVyUGF0aDsgfSk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X3Byb21pc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZSAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X3Byb21pc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X3Byb21pc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF90b19zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZyAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF90b19zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF90b19zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF9hc3NpZ25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbiAqLyAiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF9hc3NpZ25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXM2X29iamVjdF9hc3NpZ25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3Jfb3ZlcmxheV9oYW5kbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Vycm9yLW92ZXJsYXktaGFuZGxlciAqLyAiLi8uY2FjaGUvZXJyb3Itb3ZlcmxheS1oYW5kbGVyLmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9ybWFsaXplX3BhZ2VfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub3JtYWxpemUtcGFnZS1wYXRoICovICIuLy5jYWNoZS9ub3JtYWxpemUtcGFnZS1wYXRoLmpzIik7CihmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9O3ZhciBzb2NrZXQ9bnVsbDt2YXIgc3RhdGljUXVlcnlEYXRhPXt9O3ZhciBwYWdlUXVlcnlEYXRhPXt9O3ZhciBpc0luaXRpYWxpemVkPWZhbHNlO3ZhciBnZXRTdGF0aWNRdWVyeURhdGE9ZnVuY3Rpb24gZ2V0U3RhdGljUXVlcnlEYXRhKCl7cmV0dXJuIHN0YXRpY1F1ZXJ5RGF0YTt9O3ZhciBnZXRQYWdlUXVlcnlEYXRhPWZ1bmN0aW9uIGdldFBhZ2VRdWVyeURhdGEoKXtyZXR1cm4gcGFnZVF1ZXJ5RGF0YTt9O3ZhciBnZXRJc0luaXRpYWxpemVkPWZ1bmN0aW9uIGdldElzSW5pdGlhbGl6ZWQoKXtyZXR1cm4gaXNJbml0aWFsaXplZDt9O2Z1bmN0aW9uIHNvY2tldElvKCl7aWYodHJ1ZSl7aWYoIXNvY2tldCl7Ly8gVHJ5IHRvIGluaXRpYWxpemUgd2ViIHNvY2tldCBpZiB3ZSBkaWRuJ3QgZG8gaXQgYWxyZWFkeQp0cnl7Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmCnNvY2tldD1pbygpO3ZhciBkaWREYXRhQ2hhbmdlPWZ1bmN0aW9uIGRpZERhdGFDaGFuZ2UobXNnLHF1ZXJ5RGF0YSl7dmFyIGlkPW1zZy50eXBlPT09InN0YXRpY1F1ZXJ5UmVzdWx0Ij9tc2cucGF5bG9hZC5pZDpPYmplY3QoX25vcm1hbGl6ZV9wYWdlX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siZGVmYXVsdCJdKShtc2cucGF5bG9hZC5pZCk7cmV0dXJuIShpZCBpbiBxdWVyeURhdGEpfHxKU09OLnN0cmluZ2lmeShtc2cucGF5bG9hZC5yZXN1bHQpIT09SlNPTi5zdHJpbmdpZnkocXVlcnlEYXRhW2lkXSk7fTtzb2NrZXQub24oIm1lc3NhZ2UiLGZ1bmN0aW9uKG1zZyl7aWYobXNnLnR5cGU9PT0ic3RhdGljUXVlcnlSZXN1bHQiKXtpZihkaWREYXRhQ2hhbmdlKG1zZyxzdGF0aWNRdWVyeURhdGEpKXt2YXIgX09iamVjdCRhc3NpZ247c3RhdGljUXVlcnlEYXRhPU9iamVjdC5hc3NpZ24oe30sc3RhdGljUXVlcnlEYXRhLChfT2JqZWN0JGFzc2lnbj17fSxfT2JqZWN0JGFzc2lnblttc2cucGF5bG9hZC5pZF09bXNnLnBheWxvYWQucmVzdWx0LF9PYmplY3QkYXNzaWduKSk7fX1lbHNlIGlmKG1zZy50eXBlPT09InBhZ2VRdWVyeVJlc3VsdCIpe2lmKGRpZERhdGFDaGFuZ2UobXNnLHBhZ2VRdWVyeURhdGEpKXt2YXIgX09iamVjdCRhc3NpZ24yO3BhZ2VRdWVyeURhdGE9T2JqZWN0LmFzc2lnbih7fSxwYWdlUXVlcnlEYXRhLChfT2JqZWN0JGFzc2lnbjI9e30sX09iamVjdCRhc3NpZ24yW09iamVjdChfbm9ybWFsaXplX3BhZ2VfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJkZWZhdWx0Il0pKG1zZy5wYXlsb2FkLmlkKV09bXNnLnBheWxvYWQucmVzdWx0LF9PYmplY3QkYXNzaWduMikpO319ZWxzZSBpZihtc2cudHlwZT09PSJvdmVybGF5RXJyb3IiKXtpZihtc2cucGF5bG9hZC5tZXNzYWdlKXtPYmplY3QoX2Vycm9yX292ZXJsYXlfaGFuZGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJyZXBvcnRFcnJvciJdKShtc2cucGF5bG9hZC5pZCxtc2cucGF5bG9hZC5tZXNzYWdlKTt9ZWxzZXtPYmplY3QoX2Vycm9yX292ZXJsYXlfaGFuZGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJjbGVhckVycm9yIl0pKG1zZy5wYXlsb2FkLmlkKTt9fWlmKG1zZy50eXBlJiZtc2cucGF5bG9hZCl7X19fZW1pdHRlci5lbWl0KG1zZy50eXBlLG1zZy5wYXlsb2FkKTt9fSk7fWNhdGNoKGVycil7Y29uc29sZS5lcnJvcigiQ291bGQgbm90IGNvbm5lY3QgdG8gc29ja2V0LmlvIG9uIGRldiBzZXJ2ZXIuIik7fX1yZXR1cm4gc29ja2V0O31lbHNle319dmFyIGluRmxpZ2h0R2V0UGFnZURhdGFQcm9taXNlQ2FjaGU9e307ZnVuY3Rpb24gZ2V0UGFnZURhdGEocGF0aG5hbWUpe3BhdGhuYW1lPU9iamVjdChfbm9ybWFsaXplX3BhZ2VfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJkZWZhdWx0Il0pKHBhdGhuYW1lKTtpZihpbkZsaWdodEdldFBhZ2VEYXRhUHJvbWlzZUNhY2hlW3BhdGhuYW1lXSl7cmV0dXJuIGluRmxpZ2h0R2V0UGFnZURhdGFQcm9taXNlQ2FjaGVbcGF0aG5hbWVdO31lbHNle2luRmxpZ2h0R2V0UGFnZURhdGFQcm9taXNlQ2FjaGVbcGF0aG5hbWVdPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpe2lmKHBhZ2VRdWVyeURhdGFbcGF0aG5hbWVdKXtkZWxldGUgaW5GbGlnaHRHZXRQYWdlRGF0YVByb21pc2VDYWNoZVtwYXRobmFtZV07cmVzb2x2ZShwYWdlUXVlcnlEYXRhW3BhdGhuYW1lXSk7fWVsc2V7dmFyIG9uUGFnZURhdGFDYWxsYmFjaz1mdW5jdGlvbiBvblBhZ2VEYXRhQ2FsbGJhY2sobXNnKXtpZihtc2cudHlwZT09PSJwYWdlUXVlcnlSZXN1bHQiJiZPYmplY3QoX25vcm1hbGl6ZV9wYWdlX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siZGVmYXVsdCJdKShtc2cucGF5bG9hZC5pZCk9PT1wYXRobmFtZSl7c29ja2V0Lm9mZigibWVzc2FnZSIsb25QYWdlRGF0YUNhbGxiYWNrKTtkZWxldGUgaW5GbGlnaHRHZXRQYWdlRGF0YVByb21pc2VDYWNoZVtwYXRobmFtZV07cmVzb2x2ZShwYWdlUXVlcnlEYXRhW3BhdGhuYW1lXSk7fX07c29ja2V0Lm9uKCJtZXNzYWdlIixvblBhZ2VEYXRhQ2FsbGJhY2spO3NvY2tldC5lbWl0KCJnZXREYXRhRm9yUGF0aCIscGF0aG5hbWUpO319KTt9cmV0dXJuIGluRmxpZ2h0R2V0UGFnZURhdGFQcm9taXNlQ2FjaGVbcGF0aG5hbWVdO30vLyBUZWxsIHdlYnNvY2tldC1tYW5hZ2VyLmpzIHRoZSBuZXcgcGF0aCB3ZSdyZSBvbi4KLy8gVGhpcyB3aWxsIGhlbHAgdGhlIGJhY2tlbmQgcHJpb3JpdGl6ZSBxdWVyaWVzIGZvciB0aGlzCi8vIHBhdGguCmZ1bmN0aW9uIHJlZ2lzdGVyUGF0aChwYXRoKXtzb2NrZXQuZW1pdCgicmVnaXN0ZXJQYXRoIixwYXRoKTt9Ly8gVW5yZWdpc3RlciB0aGUgZm9ybWVyIHBhdGgKZnVuY3Rpb24gdW5yZWdpc3RlclBhdGgocGF0aCl7c29ja2V0LmVtaXQoInVucmVnaXN0ZXJQYXRoIixwYXRoKTt9OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoc29ja2V0LCJzb2NrZXQiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3NvY2tldElvLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoc3RhdGljUXVlcnlEYXRhLCJzdGF0aWNRdWVyeURhdGEiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3NvY2tldElvLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIocGFnZVF1ZXJ5RGF0YSwicGFnZVF1ZXJ5RGF0YSIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvc29ja2V0SW8uanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3Rlcihpc0luaXRpYWxpemVkLCJpc0luaXRpYWxpemVkIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9zb2NrZXRJby5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKGdldFN0YXRpY1F1ZXJ5RGF0YSwiZ2V0U3RhdGljUXVlcnlEYXRhIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9zb2NrZXRJby5qcyIpO3JlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKGdldFBhZ2VRdWVyeURhdGEsImdldFBhZ2VRdWVyeURhdGEiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3NvY2tldElvLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoZ2V0SXNJbml0aWFsaXplZCwiZ2V0SXNJbml0aWFsaXplZCIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvc29ja2V0SW8uanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3Rlcihzb2NrZXRJbywic29ja2V0SW8iLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3NvY2tldElvLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoaW5GbGlnaHRHZXRQYWdlRGF0YVByb21pc2VDYWNoZSwiaW5GbGlnaHRHZXRQYWdlRGF0YVByb21pc2VDYWNoZSIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy8uY2FjaGUvc29ja2V0SW8uanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3RlcihnZXRQYWdlRGF0YSwiZ2V0UGFnZURhdGEiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3NvY2tldElvLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIocmVnaXN0ZXJQYXRoLCJyZWdpc3RlclBhdGgiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3NvY2tldElvLmpzIik7cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIodW5yZWdpc3RlclBhdGgsInVucmVnaXN0ZXJQYXRoIiwiL1VzZXJzLzIwODU0NS9TaXRlcy9jaHJvbmljbGVyLW5vdGVzLy5jYWNoZS9zb2NrZXRJby5qcyIpO30pKCk7OyhmdW5jdGlvbigpe3ZhciBsZWF2ZU1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5sZWF2ZU1vZHVsZTp1bmRlZmluZWQ7bGVhdmVNb2R1bGUmJmxlYXZlTW9kdWxlKG1vZHVsZSk7fSkoKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyAqLyAiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIikobW9kdWxlKSkpCgovKioqLyB9KSwKCi8qKiovICIuLy5jYWNoZS9zdHJpcC1wcmVmaXguanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi8uY2FjaGUvc3RyaXAtcHJlZml4LmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7KGZ1bmN0aW9uKCl7dmFyIGVudGVyTW9kdWxlPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmVudGVyTW9kdWxlOnVuZGVmaW5lZDtlbnRlck1vZHVsZSYmZW50ZXJNb2R1bGUobW9kdWxlKTt9KSgpO3ZhciBfX3NpZ25hdHVyZV9fPXR5cGVvZiByZWFjdEhvdExvYWRlckdsb2JhbCE9PSd1bmRlZmluZWQnP3JlYWN0SG90TG9hZGVyR2xvYmFsLmRlZmF1bHQuc2lnbmF0dXJlOmZ1bmN0aW9uKGEpe3JldHVybiBhO307dmFyIF9kZWZhdWx0PWZ1bmN0aW9uIF9kZWZhdWx0KHN0cixwcmVmaXgpe2lmKHByZWZpeD09PXZvaWQgMCl7cHJlZml4PSIiO31pZihzdHIuc3Vic3RyKDAscHJlZml4Lmxlbmd0aCk9PT1wcmVmaXgpcmV0dXJuIHN0ci5zbGljZShwcmVmaXgubGVuZ3RoKTtyZXR1cm4gc3RyO307LyoqCiAqIFJlbW92ZSBhIHByZWZpeCBmcm9tIGEgc3RyaW5nLiBSZXR1cm4gdGhlIGlucHV0IHN0cmluZyBpZiB0aGUgZ2l2ZW4gcHJlZml4CiAqIGlzbid0IGZvdW5kLgogKi8vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bImRlZmF1bHQiXSA9IChfZGVmYXVsdCk7OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoX2RlZmF1bHQsImRlZmF1bHQiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3N0cmlwLXByZWZpeC5qcyIpO30pKCk7OyhmdW5jdGlvbigpe3ZhciBsZWF2ZU1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5sZWF2ZU1vZHVsZTp1bmRlZmluZWQ7bGVhdmVNb2R1bGUmJmxlYXZlTW9kdWxlKG1vZHVsZSk7fSkoKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyAqLyAiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIikobW9kdWxlKSkpCgovKioqLyB9KSwKCi8qKiovICIuLy5jYWNoZS9zeW5jLXJlcXVpcmVzLmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuLy5jYWNoZS9zeW5jLXJlcXVpcmVzLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkgeyhmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9O3ZhciBfcmVxdWlyZT1fX3dlYnBhY2tfcmVxdWlyZV9fKC8qISByZWFjdC1ob3QtbG9hZGVyL3Jvb3QgKi8gIi4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdC1sb2FkZXIvcm9vdC5qcyIpLGhvdD1fcmVxdWlyZS5ob3Q7Ly8gcHJlZmVyIGRlZmF1bHQgZXhwb3J0IGlmIGF2YWlsYWJsZQp2YXIgcHJlZmVyRGVmYXVsdD1mdW5jdGlvbiBwcmVmZXJEZWZhdWx0KG0pe3JldHVybiBtJiZtLmRlZmF1bHR8fG07fTtleHBvcnRzLmNvbXBvbmVudHM9eyJjb21wb25lbnQtLS1jYWNoZS1kZXYtNDA0LXBhZ2UtanMiOmhvdChwcmVmZXJEZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vLmNhY2hlL2Rldi00MDQtcGFnZS5qcyAqLyAiLi8uY2FjaGUvZGV2LTQwNC1wYWdlLmpzIikpKSwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLTQwNC1qcyI6aG90KHByZWZlckRlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zcmMvcGFnZXMvNDA0LmpzICovICIuL3NyYy9wYWdlcy80MDQuanMiKSkpLCJjb21wb25lbnQtLS1zcmMtcGFnZXMtY2FsbGJhY2stanMiOmhvdChwcmVmZXJEZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3JjL3BhZ2VzL2NhbGxiYWNrLmpzICovICIuL3NyYy9wYWdlcy9jYWxsYmFjay5qcyIpKSksImNvbXBvbmVudC0tLXNyYy1wYWdlcy1pbmRleC1qcyI6aG90KHByZWZlckRlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zcmMvcGFnZXMvaW5kZXguanMgKi8gIi4vc3JjL3BhZ2VzL2luZGV4LmpzIikpKSwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLXBhZ2UtMi1qcyI6aG90KHByZWZlckRlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zcmMvcGFnZXMvcGFnZS0yLmpzICovICIuL3NyYy9wYWdlcy9wYWdlLTIuanMiKSkpLCJjb21wb25lbnQtLS1zcmMtcGFnZXMtcHJvZmlsZS1qcyI6aG90KHByZWZlckRlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zcmMvcGFnZXMvcHJvZmlsZS5qcyAqLyAiLi9zcmMvcGFnZXMvcHJvZmlsZS5qcyIpKSl9OzsoZnVuY3Rpb24oKXt2YXIgcmVhY3RIb3RMb2FkZXI9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwuZGVmYXVsdDp1bmRlZmluZWQ7aWYoIXJlYWN0SG90TG9hZGVyKXtyZXR1cm47fXJlYWN0SG90TG9hZGVyLnJlZ2lzdGVyKHByZWZlckRlZmF1bHQsInByZWZlckRlZmF1bHQiLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvLmNhY2hlL3N5bmMtcmVxdWlyZXMuanMiKTt9KSgpOzsoZnVuY3Rpb24oKXt2YXIgbGVhdmVNb2R1bGU9dHlwZW9mIHJlYWN0SG90TG9hZGVyR2xvYmFsIT09J3VuZGVmaW5lZCc/cmVhY3RIb3RMb2FkZXJHbG9iYWwubGVhdmVNb2R1bGU6dW5kZWZpbmVkO2xlYXZlTW9kdWxlJiZsZWF2ZU1vZHVsZShtb2R1bGUpO30pKCk7Ci8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbCh0aGlzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLy4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzICovICIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIikobW9kdWxlKSkpCgovKioqLyB9KSwKCi8qKiovICIuL2dhdHNieS1icm93c2VyLmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuL2dhdHNieS1icm93c2VyLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgZXhwb3J0cyBwcm92aWRlZDogd3JhcFJvb3RFbGVtZW50ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAid3JhcFJvb3RFbGVtZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiB3cmFwUm9vdEVsZW1lbnQ7IH0pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19lc21faW5oZXJpdHNMb29zZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSAqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0ICovICIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcmNfdXRpbHNfYXV0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zcmMvdXRpbHMvYXV0aCAqLyAiLi9zcmMvdXRpbHMvYXV0aC5qcyIpOwp2YXIgX2pzeEZpbGVOYW1lPSIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvZ2F0c2J5LWJyb3dzZXIuanMiOyhmdW5jdGlvbigpe3ZhciBlbnRlck1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5lbnRlck1vZHVsZTp1bmRlZmluZWQ7ZW50ZXJNb2R1bGUmJmVudGVyTW9kdWxlKG1vZHVsZSk7fSkoKTt2YXIgX19zaWduYXR1cmVfXz10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0LnNpZ25hdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4gYTt9Oy8qKgogKiBJbXBsZW1lbnQgR2F0c2J5J3MgQnJvd3NlciBBUElzIGluIHRoaXMgZmlsZS4KICoKICogU2VlOiBodHRwczovL3d3dy5nYXRzYnlqcy5vcmcvZG9jcy9icm93c2VyLWFwaXMvCiAqLyAvLyBZb3UgY2FuIGRlbGV0ZSB0aGlzIGZpbGUgaWYgeW91J3JlIG5vdCB1c2luZyBpdAp2YXIgU2Vzc2lvbkNoZWNrPS8qI19fUFVSRV9fKi9mdW5jdGlvbihfUmVhY3QkQ29tcG9uZW50KXtPYmplY3QoX2JhYmVsX3J1bnRpbWVfaGVscGVyc19lc21faW5oZXJpdHNMb29zZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJkZWZhdWx0Il0pKFNlc3Npb25DaGVjayxfUmVhY3QkQ29tcG9uZW50KTtmdW5jdGlvbiBTZXNzaW9uQ2hlY2socHJvcHMpe3ZhciBfdGhpcztfdGhpcz1fUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcyxwcm9wcyl8fHRoaXM7X3RoaXMuaGFuZGxlQ2hlY2tTZXNzaW9uPWZ1bmN0aW9uKCl7X3RoaXMuc2V0U3RhdGUoe2xvYWRpbmc6ZmFsc2V9KTt9O190aGlzLnN0YXRlPXtsb2FkaW5nOnRydWV9O3JldHVybiBfdGhpczt9dmFyIF9wcm90bz1TZXNzaW9uQ2hlY2sucHJvdG90eXBlO19wcm90by5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpe09iamVjdChfc3JjX3V0aWxzX2F1dGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2lsZW50QXV0aCJdKSh0aGlzLmhhbmRsZUNoZWNrU2Vzc2lvbik7fTtfcHJvdG8ucmVuZGVyPWZ1bmN0aW9uIHJlbmRlcigpe3JldHVybiB0aGlzLnN0YXRlLmxvYWRpbmc9PT1mYWxzZSYmcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5GcmFnbWVudCx7X19zb3VyY2U6e2ZpbGVOYW1lOl9qc3hGaWxlTmFtZSxsaW5lTnVtYmVyOjMwfSxfX3NlbGY6dGhpc30sdGhpcy5wcm9wcy5jaGlsZHJlbik7fTsvLyBAdHMtaWdub3JlCl9wcm90by5fX3JlYWN0c3RhbmRpbl9fcmVnZW5lcmF0ZUJ5RXZhbD1mdW5jdGlvbiBfX3JlYWN0c3RhbmRpbl9fcmVnZW5lcmF0ZUJ5RXZhbChrZXksY29kZSl7Ly8gQHRzLWlnbm9yZQp0aGlzW2tleV09ZXZhbChjb2RlKTt9O3JldHVybiBTZXNzaW9uQ2hlY2s7fShyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5Db21wb25lbnQpO3ZhciB3cmFwUm9vdEVsZW1lbnQ9ZnVuY3Rpb24gd3JhcFJvb3RFbGVtZW50KF9yZWYpe3ZhciBlbGVtZW50PV9yZWYuZWxlbWVudDtyZXR1cm4gcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTZXNzaW9uQ2hlY2sse19fc291cmNlOntmaWxlTmFtZTpfanN4RmlsZU5hbWUsbGluZU51bWJlcjozN30sX19zZWxmOnRoaXN9LGVsZW1lbnQpO307OyhmdW5jdGlvbigpe3ZhciByZWFjdEhvdExvYWRlcj10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5kZWZhdWx0OnVuZGVmaW5lZDtpZighcmVhY3RIb3RMb2FkZXIpe3JldHVybjt9cmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoU2Vzc2lvbkNoZWNrLCJTZXNzaW9uQ2hlY2siLCIvVXNlcnMvMjA4NTQ1L1NpdGVzL2Nocm9uaWNsZXItbm90ZXMvZ2F0c2J5LWJyb3dzZXIuanMiKTtyZWFjdEhvdExvYWRlci5yZWdpc3Rlcih3cmFwUm9vdEVsZW1lbnQsIndyYXBSb290RWxlbWVudCIsIi9Vc2Vycy8yMDg1NDUvU2l0ZXMvY2hyb25pY2xlci1ub3Rlcy9nYXRzYnktYnJvd3Nlci5qcyIpO30pKCk7OyhmdW5jdGlvbigpe3ZhciBsZWF2ZU1vZHVsZT10eXBlb2YgcmVhY3RIb3RMb2FkZXJHbG9iYWwhPT0ndW5kZWZpbmVkJz9yZWFjdEhvdExvYWRlckdsb2JhbC5sZWF2ZU1vZHVsZTp1bmRlZmluZWQ7bGVhdmVNb2R1bGUmJmxlYXZlTW9kdWxlKG1vZHVsZSk7fSkoKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyAqLyAiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIikobW9kdWxlKSkpCgovKioqLyB9KSwKCi8qKiovICIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKCmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgewogIGlmIChzZWxmID09PSB2b2lkIDApIHsKICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7CiAgfQoKICByZXR1cm4gc2VsZjsKfQoKbW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOwoKLyoqKi8gfSksCgovKioqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKCmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsKICBpZiAoa2V5IGluIG9iaikgewogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7CiAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICB3cml0YWJsZTogdHJ1ZQogICAgfSk7CiAgfSBlbHNlIHsKICAgIG9ialtrZXldID0gdmFsdWU7CiAgfQoKICByZXR1cm4gb2JqOwp9Cgptb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eTsKCi8qKiovIH0pLAoKLyoqKi8gIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZGVmYXVsdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzOyB9KTsKZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgewogIGlmIChBcnJheS5pc0FycmF5KGFycikpIHsKICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFycjJbaV0gPSBhcnJbaV07CiAgICB9CgogICAgcmV0dXJuIGFycjI7CiAgfQp9CgovKioqLyB9KSwKCi8qKiovICIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZWZhdWx0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOyB9KTsKZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7CiAgaWYgKHNlbGYgPT09IHZvaWQgMCkgewogICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTsKICB9CgogIHJldHVybiBzZWxmOwp9CgovKioqLyB9KSwKCi8qKiovICIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZGVmYXVsdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luaGVyaXRzTG9vc2U7IH0pOwpmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykgewogIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOwogIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzOwogIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7Cn0KCi8qKiovIH0pLAoKLyoqKi8gIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImRlZmF1bHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pdGVyYWJsZVRvQXJyYXk7IH0pOwpmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsKICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09ICJbb2JqZWN0IEFyZ3VtZW50c10iKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsKfQoKLyoqKi8gfSksCgovKioqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZWZhdWx0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9uSXRlcmFibGVTcHJlYWQ7IH0pOwpmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7CiAgdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKTsKfQoKLyoqKi8gfSksCgovKioqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZWZhdWx0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdG9Db25zdW1hYmxlQXJyYXk7IH0pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FycmF5V2l0aG91dEhvbGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FycmF5V2l0aG91dEhvbGVzICovICIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2l0ZXJhYmxlVG9BcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pdGVyYWJsZVRvQXJyYXkgKi8gIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vbkl0ZXJhYmxlU3ByZWFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vbkl0ZXJhYmxlU3ByZWFkICovICIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIpOwoKCgpmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7CiAgcmV0dXJuIE9iamVjdChfYXJyYXlXaXRob3V0SG9sZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZGVmYXVsdCJdKShhcnIpIHx8IE9iamVjdChfaXRlcmFibGVUb0FycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImRlZmF1bHQiXSkoYXJyKSB8fCBPYmplY3QoX25vbkl0ZXJhYmxlU3ByZWFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImRlZmF1bHQiXSkoKTsKfQoKLyoqKi8gfSksCgovKioqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKZnVuY3Rpb24gX2V4dGVuZHMoKSB7CiAgbW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgewogICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsKCiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsKICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgewogICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGFyZ2V0OwogIH07CgogIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwp9Cgptb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzOwoKLyoqKi8gfSksCgovKioqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0c0xvb3NlLmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNMb29zZS5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsKICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTsKICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsKICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOwp9Cgptb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0c0xvb3NlOwoKLyoqKi8gfSksCgovKioqLyAiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHQuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CgpmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgewogIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7CiAgICAiZGVmYXVsdCI6IG9iagogIH07Cn0KCm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdDsKCi8qKiovIH0pLAoKLyoqKi8gIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKCmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsKICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsKICB2YXIgdGFyZ2V0ID0ge307CiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOwogIHZhciBrZXksIGk7CgogIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldOwogICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsKICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07CiAgfQoKICByZXR1cm4gdGFyZ2V0Owp9Cgptb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlOwoKLyoqKi8gfSksCgovKioqLyAiLi9ub2RlX21vZHVsZXMvQG1pa2FlbGtyaXN0aWFuc3Nvbi9kb21yZWFkeS9yZWFkeS5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi9ub2RlX21vZHVsZXMvQG1pa2FlbGtyaXN0aWFuc3Nvbi9kb21yZWFkeS9yZWFkeS5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCi8qIQogICogZG9tcmVhZHkgKGMpIER1c3RpbiBEaWF6IDIwMTQgLSBMaWNlbnNlIE1JVAogICogaWUxMCBmaXggLSBNaWthZWwgS3Jpc3RpYW5zc29uIDIwMTkKICAqLwohZnVuY3Rpb24gKG5hbWUsIGRlZmluaXRpb24pIHsKCiAgaWYgKHRydWUpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpCiAgZWxzZSB7fQoKfSgnZG9tcmVhZHknLCBmdW5jdGlvbiAoKSB7CiAgdmFyIGllMTAgPSBmYWxzZTsKICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZigiTVNJRSAxMCIpICE9PSAtMSkgewogICAgaWUxMCA9IHRydWU7CiAgfQoKICB2YXIgZm5zID0gW10sIGxpc3RlbmVyCiAgICAsIGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ29iamVjdCcgJiYgZG9jdW1lbnQKICAgICwgaGFjayA9IGllMTAgPyBkb2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCkgOiBkb2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsCiAgICAsIGRvbUNvbnRlbnRMb2FkZWQgPSAnRE9NQ29udGVudExvYWRlZCcKICAgICwgbG9hZGVkID0gZG9jICYmIChoYWNrID8gL15sb2FkZWR8XmMvIDogL15sb2FkZWR8Xml8XmMvKS50ZXN0KGRvYy5yZWFkeVN0YXRlKQoKCiAgaWYgKCFsb2FkZWQgJiYgZG9jKQogIGRvYy5hZGRFdmVudExpc3RlbmVyKGRvbUNvbnRlbnRMb2FkZWQsIGxpc3RlbmVyID0gZnVuY3Rpb24gKCkgewogICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIpCiAgICBsb2FkZWQgPSAxCiAgICB3aGlsZSAobGlzdGVuZXIgPSBmbnMuc2hpZnQoKSkgbGlzdGVuZXIoKQogIH0pCgogIHJldHVybiBmdW5jdGlvbiAoZm4pIHsKICAgIGxvYWRlZCA/IHNldFRpbWVvdXQoZm4sIDApIDogZm5zLnB1c2goZm4pCiAgfQoKfSk7CgoKLyoqKi8gfSksCgovKioqLyAiLi9ub2RlX21vZHVsZXMvQHJlYWNoL3JvdXRlci9lcy9pbmRleC5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi9ub2RlX21vZHVsZXMvQHJlYWNoL3JvdXRlci9lcy9pbmRleC5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IExpbmssIExvY2F0aW9uLCBMb2NhdGlvblByb3ZpZGVyLCBNYXRjaCwgUmVkaXJlY3QsIFJvdXRlciwgU2VydmVyTG9jYXRpb24sIGNyZWF0ZUhpc3RvcnksIGNyZWF0ZU1lbW9yeVNvdXJjZSwgaXNSZWRpcmVjdCwgbmF2aWdhdGUsIHJlZGlyZWN0VG8sIGdsb2JhbEhpc3RvcnksIEJhc2VDb250ZXh0ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaW5rIiwgZnVuY3Rpb24oKSB7IHJldHVybiBMaW5rOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTG9jYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIExvY2F0aW9uOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTG9jYXRpb25Qcm92aWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTG9jYXRpb25Qcm92aWRlcjsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdGNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNYXRjaDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlZGlyZWN0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBSZWRpcmVjdDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJvdXRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUm91dGVyOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2VydmVyTG9jYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNlcnZlckxvY2F0aW9uOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaXNSZWRpcmVjdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNSZWRpcmVjdDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInJlZGlyZWN0VG8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZGlyZWN0VG87IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCYXNlQ29udGV4dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQmFzZUNvbnRleHQ7IH0pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0ICovICIuL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHdhcm5pbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHdhcm5pbmcgKi8gIi4vbm9kZV9tb2R1bGVzL3dhcm5pbmcvYnJvd3Nlci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgd2FybmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHdhcm5pbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBwcm9wLXR5cGVzICovICIuL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGludmFyaWFudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgaW52YXJpYW50ICovICIuL25vZGVfbW9kdWxlcy9pbnZhcmlhbnQvYnJvd3Nlci5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgaW52YXJpYW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oaW52YXJpYW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY3JlYXRlX3JlYWN0X2NvbnRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNyZWF0ZS1yZWFjdC1jb250ZXh0ICovICIuLy5jYWNoZS9jcmVhdGUtcmVhY3QtY29udGV4dC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfbGlmZWN5Y2xlc19jb21wYXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0ICovICIuLy5jYWNoZS9yZWFjdC1saWZlY3ljbGVzLWNvbXBhdC5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfbGlmZWN5Y2xlc19jb21wYXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9saWZlY3ljbGVzX2NvbXBhdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saWJfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbGliL3V0aWxzICovICIuL25vZGVfbW9kdWxlcy9AcmVhY2gvcm91dGVyL2VzL2xpYi91dGlscy5qcyIpOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpYl9oaXN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpYi9oaXN0b3J5ICovICIuL25vZGVfbW9kdWxlcy9AcmVhY2gvcm91dGVyL2VzL2xpYi9oaXN0b3J5LmpzIik7Ci8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlSGlzdG9yeSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xpYl9oaXN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bImNyZWF0ZUhpc3RvcnkiXTsgfSk7CgovKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU1lbW9yeVNvdXJjZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xpYl9oaXN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bImNyZWF0ZU1lbW9yeVNvdXJjZSJdOyB9KTsKCi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibmF2aWdhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9saWJfaGlzdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJuYXZpZ2F0ZSJdOyB9KTsKCi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZ2xvYmFsSGlzdG9yeSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xpYl9oaXN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bImdsb2JhbEhpc3RvcnkiXTsgfSk7Cgp2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OwoKZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfQoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CgpmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNlbGY7IH0KCmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICJmdW5jdGlvbiIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9CgovKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9hbmNob3ItaGFzLWNvbnRlbnQgKi8KCgoKCgoKCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCnZhciBjcmVhdGVOYW1lZENvbnRleHQgPSBmdW5jdGlvbiBjcmVhdGVOYW1lZENvbnRleHQobmFtZSwgZGVmYXVsdFZhbHVlKSB7CiAgdmFyIEN0eCA9IE9iamVjdChjcmVhdGVfcmVhY3RfY29udGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJkZWZhdWx0Il0pKGRlZmF1bHRWYWx1ZSk7CiAgQ3R4LkNvbnN1bWVyLmRpc3BsYXlOYW1lID0gbmFtZSArICIuQ29uc3VtZXIiOwogIEN0eC5Qcm92aWRlci5kaXNwbGF5TmFtZSA9IG5hbWUgKyAiLlByb3ZpZGVyIjsKICByZXR1cm4gQ3R4Owp9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gTG9jYXRpb24gQ29udGV4dC9Qcm92aWRlcgp2YXIgTG9jYXRpb25Db250ZXh0ID0gY3JlYXRlTmFtZWRDb250ZXh0KCJMb2NhdGlvbiIpOwoKLy8gc2V0cyB1cCBhIGxpc3RlbmVyIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5IHNvIGFwcHMgZG9uJ3QgbmVlZCB0byBiZQovLyB3cmFwcGVkIGluIHNvbWUgdG9wIGxldmVsIHByb3ZpZGVyCnZhciBMb2NhdGlvbiA9IGZ1bmN0aW9uIExvY2F0aW9uKF9yZWYpIHsKICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuOwogIHJldHVybiByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KAogICAgTG9jYXRpb25Db250ZXh0LkNvbnN1bWVyLAogICAgbnVsbCwKICAgIGZ1bmN0aW9uIChjb250ZXh0KSB7CiAgICAgIHJldHVybiBjb250ZXh0ID8gY2hpbGRyZW4oY29udGV4dCkgOiByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KAogICAgICAgIExvY2F0aW9uUHJvdmlkZXIsCiAgICAgICAgbnVsbCwKICAgICAgICBjaGlsZHJlbgogICAgICApOwogICAgfQogICk7Cn07Cgp2YXIgTG9jYXRpb25Qcm92aWRlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7CiAgX2luaGVyaXRzKExvY2F0aW9uUHJvdmlkZXIsIF9SZWFjdCRDb21wb25lbnQpOwoKICBmdW5jdGlvbiBMb2NhdGlvblByb3ZpZGVyKCkgewogICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDsKCiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTG9jYXRpb25Qcm92aWRlcik7CgogICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKICAgIH0KCiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7CiAgICAgIGNvbnRleHQ6IF90aGlzLmdldENvbnRleHQoKSwKICAgICAgcmVmczogeyB1bmxpc3RlbjogbnVsbCB9CiAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTsKICB9CgogIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLmdldENvbnRleHQgPSBmdW5jdGlvbiBnZXRDb250ZXh0KCkgewogICAgdmFyIF9wcm9wcyRoaXN0b3J5ID0gdGhpcy5wcm9wcy5oaXN0b3J5LAogICAgICAgIG5hdmlnYXRlID0gX3Byb3BzJGhpc3RvcnkubmF2aWdhdGUsCiAgICAgICAgbG9jYXRpb24gPSBfcHJvcHMkaGlzdG9yeS5sb2NhdGlvbjsKCiAgICByZXR1cm4geyBuYXZpZ2F0ZTogbmF2aWdhdGUsIGxvY2F0aW9uOiBsb2NhdGlvbiB9OwogIH07CgogIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudERpZENhdGNoID0gZnVuY3Rpb24gY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGluZm8pIHsKICAgIGlmIChpc1JlZGlyZWN0KGVycm9yKSkgewogICAgICB2YXIgX25hdmlnYXRlID0gdGhpcy5wcm9wcy5oaXN0b3J5Lm5hdmlnYXRlOwoKICAgICAgX25hdmlnYXRlKGVycm9yLnVyaSwgeyByZXBsYWNlOiB0cnVlIH0pOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgZXJyb3I7CiAgICB9CiAgfTsKCiAgTG9jYXRpb25Qcm92aWRlci5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7CiAgICBpZiAocHJldlN0YXRlLmNvbnRleHQubG9jYXRpb24gIT09IHRoaXMuc3RhdGUuY29udGV4dC5sb2NhdGlvbikgewogICAgICB0aGlzLnByb3BzLmhpc3RvcnkuX29uVHJhbnNpdGlvbkNvbXBsZXRlKCk7CiAgICB9CiAgfTsKCiAgTG9jYXRpb25Qcm92aWRlci5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHsKICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgIHZhciByZWZzID0gdGhpcy5zdGF0ZS5yZWZzLAogICAgICAgIGhpc3RvcnkgPSB0aGlzLnByb3BzLmhpc3Rvcnk7CgogICAgcmVmcy51bmxpc3RlbiA9IGhpc3RvcnkubGlzdGVuKGZ1bmN0aW9uICgpIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgLy8gVE9ETzogcmVwbGFjZSByQUYgd2l0aCByZWFjdCBkZWZlcnJlZCB1cGRhdGUgQVBJIHdoZW4gaXQncyByZWFkeSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMzA2CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmICghX3RoaXMyLnVubW91bnRlZCkgewogICAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHJldHVybiB7IGNvbnRleHQ6IF90aGlzMi5nZXRDb250ZXh0KCkgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgfTsKCiAgTG9jYXRpb25Qcm92aWRlci5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHsKICAgIHZhciByZWZzID0gdGhpcy5zdGF0ZS5yZWZzOwoKICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZTsKICAgIHJlZnMudW5saXN0ZW4oKTsKICB9OwoKICBMb2NhdGlvblByb3ZpZGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7CiAgICB2YXIgY29udGV4dCA9IHRoaXMuc3RhdGUuY29udGV4dCwKICAgICAgICBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47CgogICAgcmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoCiAgICAgIExvY2F0aW9uQ29udGV4dC5Qcm92aWRlciwKICAgICAgeyB2YWx1ZTogY29udGV4dCB9LAogICAgICB0eXBlb2YgY2hpbGRyZW4gPT09ICJmdW5jdGlvbiIgPyBjaGlsZHJlbihjb250ZXh0KSA6IGNoaWxkcmVuIHx8IG51bGwKICAgICk7CiAgfTsKCiAgcmV0dXJuIExvY2F0aW9uUHJvdmlkZXI7Cn0ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuQ29tcG9uZW50KTsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoKTG9jYXRpb25Qcm92aWRlci5kZWZhdWx0UHJvcHMgPSB7CiAgaGlzdG9yeTogX2xpYl9oaXN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bImdsb2JhbEhpc3RvcnkiXQp9OwogdHJ1ZSA/IExvY2F0aW9uUHJvdmlkZXIucHJvcFR5cGVzID0gewogIGhpc3Rvcnk6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEub2JqZWN0LmlzUmVxdWlyZWQKfSA6IHVuZGVmaW5lZDsKdmFyIFNlcnZlckxvY2F0aW9uID0gZnVuY3Rpb24gU2VydmVyTG9jYXRpb24oX3JlZjIpIHsKICB2YXIgdXJsID0gX3JlZjIudXJsLAogICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuOwogIHJldHVybiByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KAogICAgTG9jYXRpb25Db250ZXh0LlByb3ZpZGVyLAogICAgewogICAgICB2YWx1ZTogewogICAgICAgIGxvY2F0aW9uOiB7CiAgICAgICAgICBwYXRobmFtZTogdXJsLAogICAgICAgICAgc2VhcmNoOiAiIiwKICAgICAgICAgIGhhc2g6ICIiCiAgICAgICAgfSwKICAgICAgICBuYXZpZ2F0ZTogZnVuY3Rpb24gbmF2aWdhdGUoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBjYW4ndCBjYWxsIG5hdmlnYXRlIG9uIHRoZSBzZXJ2ZXIuIik7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgY2hpbGRyZW4KICApOwp9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gU2V0cyBiYXNldXJpIGFuZCBiYXNlcGF0aCBmb3IgbmVzdGVkIHJvdXRlcnMgYW5kIGxpbmtzCnZhciBCYXNlQ29udGV4dCA9IGNyZWF0ZU5hbWVkQ29udGV4dCgiQmFzZSIsIHsgYmFzZXVyaTogIi8iLCBiYXNlcGF0aDogIi8iIH0pOwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gVGhlIG1haW4gZXZlbnQsIHdlbGNvbWUgdG8gdGhlIHNob3cgZXZlcnlib2R5Lgp2YXIgUm91dGVyID0gZnVuY3Rpb24gUm91dGVyKHByb3BzKSB7CiAgcmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoCiAgICBCYXNlQ29udGV4dC5Db25zdW1lciwKICAgIG51bGwsCiAgICBmdW5jdGlvbiAoYmFzZUNvbnRleHQpIHsKICAgICAgcmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoCiAgICAgICAgTG9jYXRpb24sCiAgICAgICAgbnVsbCwKICAgICAgICBmdW5jdGlvbiAobG9jYXRpb25Db250ZXh0KSB7CiAgICAgICAgICByZXR1cm4gcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChSb3V0ZXJJbXBsLCBfZXh0ZW5kcyh7fSwgYmFzZUNvbnRleHQsIGxvY2F0aW9uQ29udGV4dCwgcHJvcHMpKTsKICAgICAgICB9CiAgICAgICk7CiAgICB9CiAgKTsKfTsKCnZhciBSb3V0ZXJJbXBsID0gZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7CiAgX2luaGVyaXRzKFJvdXRlckltcGwsIF9SZWFjdCRQdXJlQ29tcG9uZW50KTsKCiAgZnVuY3Rpb24gUm91dGVySW1wbCgpIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSb3V0ZXJJbXBsKTsKCiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JFB1cmVDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7CiAgfQoKICBSb3V0ZXJJbXBsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7CiAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcywKICAgICAgICBsb2NhdGlvbiA9IF9wcm9wcy5sb2NhdGlvbiwKICAgICAgICBfbmF2aWdhdGUyID0gX3Byb3BzLm5hdmlnYXRlLAogICAgICAgIGJhc2VwYXRoID0gX3Byb3BzLmJhc2VwYXRoLAogICAgICAgIHByaW1hcnkgPSBfcHJvcHMucHJpbWFyeSwKICAgICAgICBjaGlsZHJlbiA9IF9wcm9wcy5jaGlsZHJlbiwKICAgICAgICBiYXNldXJpID0gX3Byb3BzLmJhc2V1cmksCiAgICAgICAgX3Byb3BzJGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsCiAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzJGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkID8gImRpdiIgOiBfcHJvcHMkY29tcG9uZW50LAogICAgICAgIGRvbVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgWyJsb2NhdGlvbiIsICJuYXZpZ2F0ZSIsICJiYXNlcGF0aCIsICJwcmltYXJ5IiwgImNoaWxkcmVuIiwgImJhc2V1cmkiLCAiY29tcG9uZW50Il0pOwoKICAgIHZhciByb3V0ZXMgPSByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGNyZWF0ZVJvdXRlKGJhc2VwYXRoKSk7CiAgICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTsKCgogICAgdmFyIG1hdGNoID0gT2JqZWN0KF9saWJfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1sicGljayJdKShyb3V0ZXMsIHBhdGhuYW1lKTsKCiAgICBpZiAobWF0Y2gpIHsKICAgICAgdmFyIHBhcmFtcyA9IG1hdGNoLnBhcmFtcywKICAgICAgICAgIHVyaSA9IG1hdGNoLnVyaSwKICAgICAgICAgIHJvdXRlID0gbWF0Y2gucm91dGUsCiAgICAgICAgICBlbGVtZW50ID0gbWF0Y2gucm91dGUudmFsdWU7CgogICAgICAvLyByZW1vdmUgdGhlIC8qIGZyb20gdGhlIGVuZCBmb3IgY2hpbGQgcm91dGVzIHJlbGF0aXZlIHBhdGhzCgogICAgICBiYXNlcGF0aCA9IHJvdXRlLmRlZmF1bHQgPyBiYXNlcGF0aCA6IHJvdXRlLnBhdGgucmVwbGFjZSgvXCokLywgIiIpOwoKICAgICAgdmFyIHByb3BzID0gX2V4dGVuZHMoe30sIHBhcmFtcywgewogICAgICAgIHVyaTogdXJpLAogICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbiwKICAgICAgICBuYXZpZ2F0ZTogZnVuY3Rpb24gbmF2aWdhdGUodG8sIG9wdGlvbnMpIHsKICAgICAgICAgIHJldHVybiBfbmF2aWdhdGUyKE9iamVjdChfbGliX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bInJlc29sdmUiXSkodG8sIHVyaSksIG9wdGlvbnMpOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICB2YXIgY2xvbmUgPSByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jbG9uZUVsZW1lbnQoZWxlbWVudCwgcHJvcHMsIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4gPyByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KAogICAgICAgIFJvdXRlciwKICAgICAgICB7IHByaW1hcnk6IHByaW1hcnkgfSwKICAgICAgICBlbGVtZW50LnByb3BzLmNoaWxkcmVuCiAgICAgICkgOiB1bmRlZmluZWQpOwoKICAgICAgLy8gdXNpbmcgJ2RpdicgZm9yIDwgMTYuMyBzdXBwb3J0CiAgICAgIHZhciBGb2N1c1dyYXBwZXIgPSBwcmltYXJ5ID8gRm9jdXNIYW5kbGVyIDogY29tcG9uZW50OwogICAgICAvLyBkb24ndCBwYXNzIGFueSBwcm9wcyB0byAnZGl2JwogICAgICB2YXIgd3JhcHBlclByb3BzID0gcHJpbWFyeSA/IF9leHRlbmRzKHsgdXJpOiB1cmksIGxvY2F0aW9uOiBsb2NhdGlvbiwgY29tcG9uZW50OiBjb21wb25lbnQgfSwgZG9tUHJvcHMpIDogZG9tUHJvcHM7CgogICAgICByZXR1cm4gcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgKICAgICAgICBCYXNlQ29udGV4dC5Qcm92aWRlciwKICAgICAgICB7IHZhbHVlOiB7IGJhc2V1cmk6IHVyaSwgYmFzZXBhdGg6IGJhc2VwYXRoIH0gfSwKICAgICAgICByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KAogICAgICAgICAgRm9jdXNXcmFwcGVyLAogICAgICAgICAgd3JhcHBlclByb3BzLAogICAgICAgICAgY2xvbmUKICAgICAgICApCiAgICAgICk7CiAgICB9IGVsc2UgewogICAgICAvLyBOb3Qgc3VyZSBpZiB3ZSB3YW50IHRoaXMsIHdvdWxkIHJlcXVpcmUgaW5kZXggcm91dGVzIGF0IGV2ZXJ5IGxldmVsCiAgICAgIC8vIHdhcm5pbmcoCiAgICAgIC8vICAgZmFsc2UsCiAgICAgIC8vICAgYDxSb3V0ZXIgYmFzZXBhdGg9IiR7YmFzZXBhdGh9Ij5cblxuTm90aGluZyBtYXRjaGVkOlxuXHQkewogICAgICAvLyAgICAgbG9jYXRpb24ucGF0aG5hbWUKICAgICAgLy8gICB9XG5cblBhdGhzIGNoZWNrZWQ6IFxuXHQke3JvdXRlcwogICAgICAvLyAgICAgLm1hcChyb3V0ZSA9PiByb3V0ZS5wYXRoKQogICAgICAvLyAgICAgLmpvaW4oCiAgICAgIC8vICAgICAgICJcblx0IgogICAgICAvLyAgICAgKX1cblxuVG8gZ2V0IHJpZCBvZiB0aGlzIHdhcm5pbmcsIGFkZCBhIGRlZmF1bHQgTm90Rm91bmQgY29tcG9uZW50IGFzIGNoaWxkIG9mIFJvdXRlcjoKICAgICAgLy8gICBcblx0bGV0IE5vdEZvdW5kID0gKCkgPT4gPGRpdj5Ob3QgRm91bmQhPC9kaXY+CiAgICAgIC8vICAgXG5cdDxSb3V0ZXI+XG5cdCAgPE5vdEZvdW5kIGRlZmF1bHQvPlxuXHQgIHsvKiAuLi4gKi99XG5cdDwvUm91dGVyPmAKICAgICAgLy8gKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfTsKCiAgcmV0dXJuIFJvdXRlckltcGw7Cn0ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuUHVyZUNvbXBvbmVudCk7CgpSb3V0ZXJJbXBsLmRlZmF1bHRQcm9wcyA9IHsKICBwcmltYXJ5OiB0cnVlCn07CgoKdmFyIEZvY3VzQ29udGV4dCA9IGNyZWF0ZU5hbWVkQ29udGV4dCgiRm9jdXMiKTsKCnZhciBGb2N1c0hhbmRsZXIgPSBmdW5jdGlvbiBGb2N1c0hhbmRsZXIoX3JlZjMpIHsKICB2YXIgdXJpID0gX3JlZjMudXJpLAogICAgICBsb2NhdGlvbiA9IF9yZWYzLmxvY2F0aW9uLAogICAgICBjb21wb25lbnQgPSBfcmVmMy5jb21wb25lbnQsCiAgICAgIGRvbVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYzLCBbInVyaSIsICJsb2NhdGlvbiIsICJjb21wb25lbnQiXSk7CgogIHJldHVybiByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KAogICAgRm9jdXNDb250ZXh0LkNvbnN1bWVyLAogICAgbnVsbCwKICAgIGZ1bmN0aW9uIChyZXF1ZXN0Rm9jdXMpIHsKICAgICAgcmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoRm9jdXNIYW5kbGVySW1wbCwgX2V4dGVuZHMoe30sIGRvbVByb3BzLCB7CiAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsCiAgICAgICAgcmVxdWVzdEZvY3VzOiByZXF1ZXN0Rm9jdXMsCiAgICAgICAgdXJpOiB1cmksCiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uCiAgICAgIH0pKTsKICAgIH0KICApOwp9OwoKLy8gZG9uJ3QgZm9jdXMgb24gaW5pdGlhbCByZW5kZXIKdmFyIGluaXRpYWxSZW5kZXIgPSB0cnVlOwp2YXIgZm9jdXNIYW5kbGVyQ291bnQgPSAwOwoKdmFyIEZvY3VzSGFuZGxlckltcGwgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudDIpIHsKICBfaW5oZXJpdHMoRm9jdXNIYW5kbGVySW1wbCwgX1JlYWN0JENvbXBvbmVudDIpOwoKICBmdW5jdGlvbiBGb2N1c0hhbmRsZXJJbXBsKCkgewogICAgdmFyIF90ZW1wMiwgX3RoaXM0LCBfcmV0MjsKCiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm9jdXNIYW5kbGVySW1wbCk7CgogICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHsKICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdOwogICAgfQoKICAgIHJldHVybiBfcmV0MiA9IChfdGVtcDIgPSAoX3RoaXM0ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudDIuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50MiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpczQpLCBfdGhpczQuc3RhdGUgPSB7fSwgX3RoaXM0LnJlcXVlc3RGb2N1cyA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgIGlmICghX3RoaXM0LnN0YXRlLnNob3VsZEZvY3VzKSB7CiAgICAgICAgbm9kZS5mb2N1cygpOwogICAgICB9CiAgICB9LCBfdGVtcDIpLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpczQsIF9yZXQyKTsKICB9CgogIEZvY3VzSGFuZGxlckltcGwuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7CiAgICB2YXIgaW5pdGlhbCA9IHByZXZTdGF0ZS51cmkgPT0gbnVsbDsKICAgIGlmIChpbml0aWFsKSB7CiAgICAgIHJldHVybiBfZXh0ZW5kcyh7CiAgICAgICAgc2hvdWxkRm9jdXM6IHRydWUKICAgICAgfSwgbmV4dFByb3BzKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBteVVSSUNoYW5nZWQgPSBuZXh0UHJvcHMudXJpICE9PSBwcmV2U3RhdGUudXJpOwogICAgICB2YXIgbmF2aWdhdGVkVXBUb01lID0gcHJldlN0YXRlLmxvY2F0aW9uLnBhdGhuYW1lICE9PSBuZXh0UHJvcHMubG9jYXRpb24ucGF0aG5hbWUgJiYgbmV4dFByb3BzLmxvY2F0aW9uLnBhdGhuYW1lID09PSBuZXh0UHJvcHMudXJpOwogICAgICByZXR1cm4gX2V4dGVuZHMoewogICAgICAgIHNob3VsZEZvY3VzOiBteVVSSUNoYW5nZWQgfHwgbmF2aWdhdGVkVXBUb01lCiAgICAgIH0sIG5leHRQcm9wcyk7CiAgICB9CiAgfTsKCiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHsKICAgIGZvY3VzSGFuZGxlckNvdW50Kys7CiAgICB0aGlzLmZvY3VzKCk7CiAgfTsKCiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHsKICAgIGZvY3VzSGFuZGxlckNvdW50LS07CiAgICBpZiAoZm9jdXNIYW5kbGVyQ291bnQgPT09IDApIHsKICAgICAgaW5pdGlhbFJlbmRlciA9IHRydWU7CiAgICB9CiAgfTsKCiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7CiAgICBpZiAocHJldlByb3BzLmxvY2F0aW9uICE9PSB0aGlzLnByb3BzLmxvY2F0aW9uICYmIHRoaXMuc3RhdGUuc2hvdWxkRm9jdXMpIHsKICAgICAgdGhpcy5mb2N1cygpOwogICAgfQogIH07CgogIEZvY3VzSGFuZGxlckltcGwucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gZm9jdXMoKSB7CiAgICBpZiAoZmFsc2UpIHt9CgogICAgdmFyIHJlcXVlc3RGb2N1cyA9IHRoaXMucHJvcHMucmVxdWVzdEZvY3VzOwoKCiAgICBpZiAocmVxdWVzdEZvY3VzKSB7CiAgICAgIHJlcXVlc3RGb2N1cyh0aGlzLm5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGluaXRpYWxSZW5kZXIpIHsKICAgICAgICBpbml0aWFsUmVuZGVyID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gUmVhY3QgcG9seWZpbGxzIFthdXRvZm9jdXNdIGFuZCBpdCBmaXJlcyBlYXJsaWVyIHRoYW4gY0RNLAogICAgICAgIC8vIHNvIHdlIHdlcmUgc3RlYWxpbmcgZm9jdXMgYXdheSwgdGhpcyBsaW5lIHByZXZlbnRzIHRoYXQuCiAgICAgICAgaWYgKCF0aGlzLm5vZGUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHsKICAgICAgICAgIHRoaXMubm9kZS5mb2N1cygpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIEZvY3VzSGFuZGxlckltcGwucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHsKICAgIHZhciBfdGhpczUgPSB0aGlzOwoKICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcywKICAgICAgICBjaGlsZHJlbiA9IF9wcm9wczIuY2hpbGRyZW4sCiAgICAgICAgc3R5bGUgPSBfcHJvcHMyLnN0eWxlLAogICAgICAgIHJlcXVlc3RGb2N1cyA9IF9wcm9wczIucmVxdWVzdEZvY3VzLAogICAgICAgIF9wcm9wczIkcm9sZSA9IF9wcm9wczIucm9sZSwKICAgICAgICByb2xlID0gX3Byb3BzMiRyb2xlID09PSB1bmRlZmluZWQgPyAiZ3JvdXAiIDogX3Byb3BzMiRyb2xlLAogICAgICAgIF9wcm9wczIkY29tcG9uZW50ID0gX3Byb3BzMi5jb21wb25lbnQsCiAgICAgICAgQ29tcCA9IF9wcm9wczIkY29tcG9uZW50ID09PSB1bmRlZmluZWQgPyAiZGl2IiA6IF9wcm9wczIkY29tcG9uZW50LAogICAgICAgIHVyaSA9IF9wcm9wczIudXJpLAogICAgICAgIGxvY2F0aW9uID0gX3Byb3BzMi5sb2NhdGlvbiwKICAgICAgICBkb21Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMyLCBbImNoaWxkcmVuIiwgInN0eWxlIiwgInJlcXVlc3RGb2N1cyIsICJyb2xlIiwgImNvbXBvbmVudCIsICJ1cmkiLCAibG9jYXRpb24iXSk7CgogICAgcmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoCiAgICAgIENvbXAsCiAgICAgIF9leHRlbmRzKHsKICAgICAgICBzdHlsZTogX2V4dGVuZHMoeyBvdXRsaW5lOiAibm9uZSIgfSwgc3R5bGUpLAogICAgICAgIHRhYkluZGV4OiAiLTEiLAogICAgICAgIHJvbGU6IHJvbGUsCiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikgewogICAgICAgICAgcmV0dXJuIF90aGlzNS5ub2RlID0gbjsKICAgICAgICB9CiAgICAgIH0sIGRvbVByb3BzKSwKICAgICAgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgKICAgICAgICBGb2N1c0NvbnRleHQuUHJvdmlkZXIsCiAgICAgICAgeyB2YWx1ZTogdGhpcy5yZXF1ZXN0Rm9jdXMgfSwKICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuCiAgICAgICkKICAgICk7CiAgfTsKCiAgcmV0dXJuIEZvY3VzSGFuZGxlckltcGw7Cn0ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuQ29tcG9uZW50KTsKCk9iamVjdChyZWFjdF9saWZlY3ljbGVzX2NvbXBhdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJwb2x5ZmlsbCJdKShGb2N1c0hhbmRsZXJJbXBsKTsKCnZhciBrID0gZnVuY3Rpb24gaygpIHt9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KdmFyIGZvcndhcmRSZWYgPSByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5mb3J3YXJkUmVmOwoKaWYgKHR5cGVvZiBmb3J3YXJkUmVmID09PSAidW5kZWZpbmVkIikgewogIGZvcndhcmRSZWYgPSBmdW5jdGlvbiBmb3J3YXJkUmVmKEMpIHsKICAgIHJldHVybiBDOwogIH07Cn0KCnZhciBMaW5rID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZjQsIHJlZikgewogIHZhciBpbm5lclJlZiA9IF9yZWY0LmlubmVyUmVmLAogICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNCwgWyJpbm5lclJlZiJdKTsKCiAgcmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoCiAgICBCYXNlQ29udGV4dC5Db25zdW1lciwKICAgIG51bGwsCiAgICBmdW5jdGlvbiAoX3JlZjUpIHsKICAgICAgdmFyIGJhc2VwYXRoID0gX3JlZjUuYmFzZXBhdGgsCiAgICAgICAgICBiYXNldXJpID0gX3JlZjUuYmFzZXVyaTsKICAgICAgcmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoCiAgICAgICAgTG9jYXRpb24sCiAgICAgICAgbnVsbCwKICAgICAgICBmdW5jdGlvbiAoX3JlZjYpIHsKICAgICAgICAgIHZhciBsb2NhdGlvbiA9IF9yZWY2LmxvY2F0aW9uLAogICAgICAgICAgICAgIG5hdmlnYXRlID0gX3JlZjYubmF2aWdhdGU7CgogICAgICAgICAgdmFyIHRvID0gcHJvcHMudG8sCiAgICAgICAgICAgICAgc3RhdGUgPSBwcm9wcy5zdGF0ZSwKICAgICAgICAgICAgICByZXBsYWNlID0gcHJvcHMucmVwbGFjZSwKICAgICAgICAgICAgICBfcHJvcHMkZ2V0UHJvcHMgPSBwcm9wcy5nZXRQcm9wcywKICAgICAgICAgICAgICBnZXRQcm9wcyA9IF9wcm9wcyRnZXRQcm9wcyA9PT0gdW5kZWZpbmVkID8gayA6IF9wcm9wcyRnZXRQcm9wcywKICAgICAgICAgICAgICBhbmNob3JQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgWyJ0byIsICJzdGF0ZSIsICJyZXBsYWNlIiwgImdldFByb3BzIl0pOwoKICAgICAgICAgIHZhciBocmVmID0gT2JqZWN0KF9saWJfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1sicmVzb2x2ZSJdKSh0bywgYmFzZXVyaSk7CiAgICAgICAgICB2YXIgaXNDdXJyZW50ID0gbG9jYXRpb24ucGF0aG5hbWUgPT09IGhyZWY7CiAgICAgICAgICB2YXIgaXNQYXJ0aWFsbHlDdXJyZW50ID0gT2JqZWN0KF9saWJfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1sic3RhcnRzV2l0aCJdKShsb2NhdGlvbi5wYXRobmFtZSwgaHJlZik7CgogICAgICAgICAgcmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoImEiLCBfZXh0ZW5kcyh7CiAgICAgICAgICAgIHJlZjogcmVmIHx8IGlubmVyUmVmLAogICAgICAgICAgICAiYXJpYS1jdXJyZW50IjogaXNDdXJyZW50ID8gInBhZ2UiIDogdW5kZWZpbmVkCiAgICAgICAgICB9LCBhbmNob3JQcm9wcywgZ2V0UHJvcHMoeyBpc0N1cnJlbnQ6IGlzQ3VycmVudCwgaXNQYXJ0aWFsbHlDdXJyZW50OiBpc1BhcnRpYWxseUN1cnJlbnQsIGhyZWY6IGhyZWYsIGxvY2F0aW9uOiBsb2NhdGlvbiB9KSwgewogICAgICAgICAgICBocmVmOiBocmVmLAogICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7CiAgICAgICAgICAgICAgaWYgKGFuY2hvclByb3BzLm9uQ2xpY2spIGFuY2hvclByb3BzLm9uQ2xpY2soZXZlbnQpOwogICAgICAgICAgICAgIGlmIChzaG91bGROYXZpZ2F0ZShldmVudCkpIHsKICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICBuYXZpZ2F0ZShocmVmLCB7IHN0YXRlOiBzdGF0ZSwgcmVwbGFjZTogcmVwbGFjZSB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICk7CiAgICB9CiAgKTsKfSk7CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpmdW5jdGlvbiBSZWRpcmVjdFJlcXVlc3QodXJpKSB7CiAgdGhpcy51cmkgPSB1cmk7Cn0KCnZhciBpc1JlZGlyZWN0ID0gZnVuY3Rpb24gaXNSZWRpcmVjdChvKSB7CiAgcmV0dXJuIG8gaW5zdGFuY2VvZiBSZWRpcmVjdFJlcXVlc3Q7Cn07Cgp2YXIgcmVkaXJlY3RUbyA9IGZ1bmN0aW9uIHJlZGlyZWN0VG8odG8pIHsKICB0aHJvdyBuZXcgUmVkaXJlY3RSZXF1ZXN0KHRvKTsKfTsKCnZhciBSZWRpcmVjdEltcGwgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudDMpIHsKICBfaW5oZXJpdHMoUmVkaXJlY3RJbXBsLCBfUmVhY3QkQ29tcG9uZW50Myk7CgogIGZ1bmN0aW9uIFJlZGlyZWN0SW1wbCgpIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWRpcmVjdEltcGwpOwoKICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50My5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKICB9CgogIC8vIFN1cHBvcnQgUmVhY3QgPCAxNiB3aXRoIHRoaXMgaG9vawogIFJlZGlyZWN0SW1wbC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHsKICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcywKICAgICAgICBuYXZpZ2F0ZSA9IF9wcm9wczMubmF2aWdhdGUsCiAgICAgICAgdG8gPSBfcHJvcHMzLnRvLAogICAgICAgIGZyb20gPSBfcHJvcHMzLmZyb20sCiAgICAgICAgX3Byb3BzMyRyZXBsYWNlID0gX3Byb3BzMy5yZXBsYWNlLAogICAgICAgIHJlcGxhY2UgPSBfcHJvcHMzJHJlcGxhY2UgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBfcHJvcHMzJHJlcGxhY2UsCiAgICAgICAgc3RhdGUgPSBfcHJvcHMzLnN0YXRlLAogICAgICAgIG5vVGhyb3cgPSBfcHJvcHMzLm5vVGhyb3csCiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzMywgWyJuYXZpZ2F0ZSIsICJ0byIsICJmcm9tIiwgInJlcGxhY2UiLCAic3RhdGUiLCAibm9UaHJvdyJdKTsKCiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgbmF2aWdhdGUoT2JqZWN0KF9saWJfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siaW5zZXJ0UGFyYW1zIl0pKHRvLCBwcm9wcyksIHsgcmVwbGFjZTogcmVwbGFjZSwgc3RhdGU6IHN0YXRlIH0pOwogICAgfSk7CiAgfTsKCiAgUmVkaXJlY3RJbXBsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7CiAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsCiAgICAgICAgbmF2aWdhdGUgPSBfcHJvcHM0Lm5hdmlnYXRlLAogICAgICAgIHRvID0gX3Byb3BzNC50bywKICAgICAgICBmcm9tID0gX3Byb3BzNC5mcm9tLAogICAgICAgIHJlcGxhY2UgPSBfcHJvcHM0LnJlcGxhY2UsCiAgICAgICAgc3RhdGUgPSBfcHJvcHM0LnN0YXRlLAogICAgICAgIG5vVGhyb3cgPSBfcHJvcHM0Lm5vVGhyb3csCiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzNCwgWyJuYXZpZ2F0ZSIsICJ0byIsICJmcm9tIiwgInJlcGxhY2UiLCAic3RhdGUiLCAibm9UaHJvdyJdKTsKCiAgICBpZiAoIW5vVGhyb3cpIHJlZGlyZWN0VG8oT2JqZWN0KF9saWJfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siaW5zZXJ0UGFyYW1zIl0pKHRvLCBwcm9wcykpOwogICAgcmV0dXJuIG51bGw7CiAgfTsKCiAgcmV0dXJuIFJlZGlyZWN0SW1wbDsKfShyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5Db21wb25lbnQpOwoKdmFyIFJlZGlyZWN0ID0gZnVuY3Rpb24gUmVkaXJlY3QocHJvcHMpIHsKICByZXR1cm4gcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgKICAgIExvY2F0aW9uLAogICAgbnVsbCwKICAgIGZ1bmN0aW9uIChsb2NhdGlvbkNvbnRleHQpIHsKICAgICAgcmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoUmVkaXJlY3RJbXBsLCBfZXh0ZW5kcyh7fSwgbG9jYXRpb25Db250ZXh0LCBwcm9wcykpOwogICAgfQogICk7Cn07CgogdHJ1ZSA/IFJlZGlyZWN0LnByb3BUeXBlcyA9IHsKICBmcm9tOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLnN0cmluZywKICB0bzogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYS5zdHJpbmcuaXNSZXF1aXJlZAp9IDogdW5kZWZpbmVkOwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KdmFyIE1hdGNoID0gZnVuY3Rpb24gTWF0Y2goX3JlZjcpIHsKICB2YXIgcGF0aCA9IF9yZWY3LnBhdGgsCiAgICAgIGNoaWxkcmVuID0gX3JlZjcuY2hpbGRyZW47CiAgcmV0dXJuIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoCiAgICBCYXNlQ29udGV4dC5Db25zdW1lciwKICAgIG51bGwsCiAgICBmdW5jdGlvbiAoX3JlZjgpIHsKICAgICAgdmFyIGJhc2V1cmkgPSBfcmVmOC5iYXNldXJpOwogICAgICByZXR1cm4gcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgKICAgICAgICBMb2NhdGlvbiwKICAgICAgICBudWxsLAogICAgICAgIGZ1bmN0aW9uIChfcmVmOSkgewogICAgICAgICAgdmFyIG5hdmlnYXRlID0gX3JlZjkubmF2aWdhdGUsCiAgICAgICAgICAgICAgbG9jYXRpb24gPSBfcmVmOS5sb2NhdGlvbjsKCiAgICAgICAgICB2YXIgcmVzb2x2ZWRQYXRoID0gT2JqZWN0KF9saWJfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1sicmVzb2x2ZSJdKShwYXRoLCBiYXNldXJpKTsKICAgICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QoX2xpYl91dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJtYXRjaCJdKShyZXNvbHZlZFBhdGgsIGxvY2F0aW9uLnBhdGhuYW1lKTsKICAgICAgICAgIHJldHVybiBjaGlsZHJlbih7CiAgICAgICAgICAgIG5hdmlnYXRlOiBuYXZpZ2F0ZSwKICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLAogICAgICAgICAgICBtYXRjaDogcmVzdWx0ID8gX2V4dGVuZHMoe30sIHJlc3VsdC5wYXJhbXMsIHsKICAgICAgICAgICAgICB1cmk6IHJlc3VsdC51cmksCiAgICAgICAgICAgICAgcGF0aDogcGF0aAogICAgICAgICAgICB9KSA6IG51bGwKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgKTsKICAgIH0KICApOwp9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gSnVuawp2YXIgc3RyaXBTbGFzaGVzID0gZnVuY3Rpb24gc3RyaXBTbGFzaGVzKHN0cikgewogIHJldHVybiBzdHIucmVwbGFjZSgvKF5cLyt8XC8rJCkvZywgIiIpOwp9OwoKdmFyIGNyZWF0ZVJvdXRlID0gZnVuY3Rpb24gY3JlYXRlUm91dGUoYmFzZXBhdGgpIHsKICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHsKICAgIGlmICghZWxlbWVudCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAhKGVsZW1lbnQucHJvcHMucGF0aCB8fCBlbGVtZW50LnByb3BzLmRlZmF1bHQgfHwgZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCkgPyAgdHJ1ZSA/IGludmFyaWFudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShmYWxzZSwgIjxSb3V0ZXI+OiBDaGlsZHJlbiBvZiA8Um91dGVyPiBtdXN0IGhhdmUgYSBgcGF0aGAgb3IgYGRlZmF1bHRgIHByb3AsIG9yIGJlIGEgYDxSZWRpcmVjdD5gLiBOb25lIGZvdW5kIG9uIGVsZW1lbnQgdHlwZSBgIiArIGVsZW1lbnQudHlwZSArICJgIikgOiB1bmRlZmluZWQgOiB2b2lkIDA7CgogICAgISEoZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCAmJiAoIWVsZW1lbnQucHJvcHMuZnJvbSB8fCAhZWxlbWVudC5wcm9wcy50bykpID8gIHRydWUgPyBpbnZhcmlhbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoZmFsc2UsICI8UmVkaXJlY3QgZnJvbT1cIiIgKyBlbGVtZW50LnByb3BzLmZyb20gKyAiIHRvPVwiIiArIGVsZW1lbnQucHJvcHMudG8gKyAiXCIvPiByZXF1aXJlcyBib3RoIFwiZnJvbVwiIGFuZCBcInRvXCIgcHJvcHMgd2hlbiBpbnNpZGUgYSA8Um91dGVyPi4iKSA6IHVuZGVmaW5lZCA6IHZvaWQgMDsKCiAgICAhIShlbGVtZW50LnR5cGUgPT09IFJlZGlyZWN0ICYmICFPYmplY3QoX2xpYl91dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJ2YWxpZGF0ZVJlZGlyZWN0Il0pKGVsZW1lbnQucHJvcHMuZnJvbSwgZWxlbWVudC5wcm9wcy50bykpID8gIHRydWUgPyBpbnZhcmlhbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoZmFsc2UsICI8UmVkaXJlY3QgZnJvbT1cIiIgKyBlbGVtZW50LnByb3BzLmZyb20gKyAiIHRvPVwiIiArIGVsZW1lbnQucHJvcHMudG8gKyAiXCIvPiBoYXMgbWlzbWF0Y2hlZCBkeW5hbWljIHNlZ21lbnRzLCBlbnN1cmUgYm90aCBwYXRocyBoYXZlIHRoZSBleGFjdCBzYW1lIGR5bmFtaWMgc2VnbWVudHMuIikgOiB1bmRlZmluZWQgOiB2b2lkIDA7CgogICAgaWYgKGVsZW1lbnQucHJvcHMuZGVmYXVsdCkgewogICAgICByZXR1cm4geyB2YWx1ZTogZWxlbWVudCwgZGVmYXVsdDogdHJ1ZSB9OwogICAgfQoKICAgIHZhciBlbGVtZW50UGF0aCA9IGVsZW1lbnQudHlwZSA9PT0gUmVkaXJlY3QgPyBlbGVtZW50LnByb3BzLmZyb20gOiBlbGVtZW50LnByb3BzLnBhdGg7CgogICAgdmFyIHBhdGggPSBlbGVtZW50UGF0aCA9PT0gIi8iID8gYmFzZXBhdGggOiBzdHJpcFNsYXNoZXMoYmFzZXBhdGgpICsgIi8iICsgc3RyaXBTbGFzaGVzKGVsZW1lbnRQYXRoKTsKCiAgICByZXR1cm4gewogICAgICB2YWx1ZTogZWxlbWVudCwKICAgICAgZGVmYXVsdDogZWxlbWVudC5wcm9wcy5kZWZhdWx0LAogICAgICBwYXRoOiBlbGVtZW50LnByb3BzLmNoaWxkcmVuID8gc3RyaXBTbGFzaGVzKHBhdGgpICsgIi8qIiA6IHBhdGgKICAgIH07CiAgfTsKfTsKCnZhciBzaG91bGROYXZpZ2F0ZSA9IGZ1bmN0aW9uIHNob3VsZE5hdmlnYXRlKGV2ZW50KSB7CiAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIGV2ZW50LmJ1dHRvbiA9PT0gMCAmJiAhKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkpOwp9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoKLyoqKi8gfSksCgovKioqLyAiLi9ub2RlX21vZHVsZXMvQHJlYWNoL3JvdXRlci9lcy9saWIvaGlzdG9yeS5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi9ub2RlX21vZHVsZXMvQHJlYWNoL3JvdXRlci9lcy9saWIvaGlzdG9yeS5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGdsb2JhbEhpc3RvcnksIG5hdmlnYXRlLCBjcmVhdGVIaXN0b3J5LCBjcmVhdGVNZW1vcnlTb3VyY2UgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImdsb2JhbEhpc3RvcnkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdsb2JhbEhpc3Rvcnk7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJuYXZpZ2F0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbmF2aWdhdGU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVIaXN0b3J5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVIaXN0b3J5OyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTWVtb3J5U291cmNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVNZW1vcnlTb3VyY2U7IH0pOwp2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OwoKdmFyIGdldExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0TG9jYXRpb24oc291cmNlKSB7CiAgcmV0dXJuIF9leHRlbmRzKHt9LCBzb3VyY2UubG9jYXRpb24sIHsKICAgIHN0YXRlOiBzb3VyY2UuaGlzdG9yeS5zdGF0ZSwKICAgIGtleTogc291cmNlLmhpc3Rvcnkuc3RhdGUgJiYgc291cmNlLmhpc3Rvcnkuc3RhdGUua2V5IHx8ICJpbml0aWFsIgogIH0pOwp9OwoKdmFyIGNyZWF0ZUhpc3RvcnkgPSBmdW5jdGlvbiBjcmVhdGVIaXN0b3J5KHNvdXJjZSwgb3B0aW9ucykgewogIHZhciBsaXN0ZW5lcnMgPSBbXTsKICB2YXIgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzb3VyY2UpOwogIHZhciB0cmFuc2l0aW9uaW5nID0gZmFsc2U7CiAgdmFyIHJlc29sdmVUcmFuc2l0aW9uID0gZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb24oKSB7fTsKCiAgcmV0dXJuIHsKICAgIGdldCBsb2NhdGlvbigpIHsKICAgICAgcmV0dXJuIGxvY2F0aW9uOwogICAgfSwKCiAgICBnZXQgdHJhbnNpdGlvbmluZygpIHsKICAgICAgcmV0dXJuIHRyYW5zaXRpb25pbmc7CiAgICB9LAoKICAgIF9vblRyYW5zaXRpb25Db21wbGV0ZTogZnVuY3Rpb24gX29uVHJhbnNpdGlvbkNvbXBsZXRlKCkgewogICAgICB0cmFuc2l0aW9uaW5nID0gZmFsc2U7CiAgICAgIHJlc29sdmVUcmFuc2l0aW9uKCk7CiAgICB9LAogICAgbGlzdGVuOiBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHsKICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpOwoKICAgICAgdmFyIHBvcHN0YXRlTGlzdGVuZXIgPSBmdW5jdGlvbiBwb3BzdGF0ZUxpc3RlbmVyKCkgewogICAgICAgIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24oc291cmNlKTsKICAgICAgICBsaXN0ZW5lcih7IGxvY2F0aW9uOiBsb2NhdGlvbiwgYWN0aW9uOiAiUE9QIiB9KTsKICAgICAgfTsKCiAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsIHBvcHN0YXRlTGlzdGVuZXIpOwoKICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICBzb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLCBwb3BzdGF0ZUxpc3RlbmVyKTsKICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChmbikgewogICAgICAgICAgcmV0dXJuIGZuICE9PSBsaXN0ZW5lcjsKICAgICAgICB9KTsKICAgICAgfTsKICAgIH0sCiAgICBuYXZpZ2F0ZTogZnVuY3Rpb24gbmF2aWdhdGUodG8pIHsKICAgICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LAogICAgICAgICAgc3RhdGUgPSBfcmVmLnN0YXRlLAogICAgICAgICAgX3JlZiRyZXBsYWNlID0gX3JlZi5yZXBsYWNlLAogICAgICAgICAgcmVwbGFjZSA9IF9yZWYkcmVwbGFjZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmJHJlcGxhY2U7CgogICAgICBzdGF0ZSA9IF9leHRlbmRzKHt9LCBzdGF0ZSwgeyBrZXk6IERhdGUubm93KCkgKyAiIiB9KTsKICAgICAgLy8gdHJ5Li4uY2F0Y2ggaU9TIFNhZmFyaSBsaW1pdHMgdG8gMTAwIHB1c2hTdGF0ZSBjYWxscwogICAgICB0cnkgewogICAgICAgIGlmICh0cmFuc2l0aW9uaW5nIHx8IHJlcGxhY2UpIHsKICAgICAgICAgIHNvdXJjZS5oaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZSwgbnVsbCwgdG8pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzb3VyY2UuaGlzdG9yeS5wdXNoU3RhdGUoc3RhdGUsIG51bGwsIHRvKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBzb3VyY2UubG9jYXRpb25bcmVwbGFjZSA/ICJyZXBsYWNlIiA6ICJhc3NpZ24iXSh0byk7CiAgICAgIH0KCiAgICAgIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24oc291cmNlKTsKICAgICAgdHJhbnNpdGlvbmluZyA9IHRydWU7CiAgICAgIHZhciB0cmFuc2l0aW9uID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcykgewogICAgICAgIHJldHVybiByZXNvbHZlVHJhbnNpdGlvbiA9IHJlczsKICAgICAgfSk7CiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikgewogICAgICAgIHJldHVybiBsaXN0ZW5lcih7IGxvY2F0aW9uOiBsb2NhdGlvbiwgYWN0aW9uOiAiUFVTSCIgfSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gdHJhbnNpdGlvbjsKICAgIH0KICB9Owp9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gU3RvcmVzIGhpc3RvcnkgZW50cmllcyBpbiBtZW1vcnkgZm9yIHRlc3Rpbmcgb3Igb3RoZXIgcGxhdGZvcm1zIGxpa2UgTmF0aXZlCnZhciBjcmVhdGVNZW1vcnlTb3VyY2UgPSBmdW5jdGlvbiBjcmVhdGVNZW1vcnlTb3VyY2UoKSB7CiAgdmFyIGluaXRpYWxQYXRobmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogIi8iOwoKICB2YXIgaW5kZXggPSAwOwogIHZhciBzdGFjayA9IFt7IHBhdGhuYW1lOiBpbml0aWFsUGF0aG5hbWUsIHNlYXJjaDogIiIgfV07CiAgdmFyIHN0YXRlcyA9IFtdOwoKICByZXR1cm4gewogICAgZ2V0IGxvY2F0aW9uKCkgewogICAgICByZXR1cm4gc3RhY2tbaW5kZXhdOwogICAgfSwKICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZm4pIHt9LAogICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmbikge30sCgogICAgaGlzdG9yeTogewogICAgICBnZXQgZW50cmllcygpIHsKICAgICAgICByZXR1cm4gc3RhY2s7CiAgICAgIH0sCiAgICAgIGdldCBpbmRleCgpIHsKICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgIH0sCiAgICAgIGdldCBzdGF0ZSgpIHsKICAgICAgICByZXR1cm4gc3RhdGVzW2luZGV4XTsKICAgICAgfSwKICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiBwdXNoU3RhdGUoc3RhdGUsIF8sIHVyaSkgewogICAgICAgIHZhciBfdXJpJHNwbGl0ID0gdXJpLnNwbGl0KCI/IiksCiAgICAgICAgICAgIHBhdGhuYW1lID0gX3VyaSRzcGxpdFswXSwKICAgICAgICAgICAgX3VyaSRzcGxpdCQgPSBfdXJpJHNwbGl0WzFdLAogICAgICAgICAgICBzZWFyY2ggPSBfdXJpJHNwbGl0JCA9PT0gdW5kZWZpbmVkID8gIiIgOiBfdXJpJHNwbGl0JDsKCiAgICAgICAgaW5kZXgrKzsKICAgICAgICBzdGFjay5wdXNoKHsgcGF0aG5hbWU6IHBhdGhuYW1lLCBzZWFyY2g6IHNlYXJjaCB9KTsKICAgICAgICBzdGF0ZXMucHVzaChzdGF0ZSk7CiAgICAgIH0sCiAgICAgIHJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gcmVwbGFjZVN0YXRlKHN0YXRlLCBfLCB1cmkpIHsKICAgICAgICB2YXIgX3VyaSRzcGxpdDIgPSB1cmkuc3BsaXQoIj8iKSwKICAgICAgICAgICAgcGF0aG5hbWUgPSBfdXJpJHNwbGl0MlswXSwKICAgICAgICAgICAgX3VyaSRzcGxpdDIkID0gX3VyaSRzcGxpdDJbMV0sCiAgICAgICAgICAgIHNlYXJjaCA9IF91cmkkc3BsaXQyJCA9PT0gdW5kZWZpbmVkID8gIiIgOiBfdXJpJHNwbGl0MiQ7CgogICAgICAgIHN0YWNrW2luZGV4XSA9IHsgcGF0aG5hbWU6IHBhdGhuYW1lLCBzZWFyY2g6IHNlYXJjaCB9OwogICAgICAgIHN0YXRlc1tpbmRleF0gPSBzdGF0ZTsKICAgICAgfQogICAgfQogIH07Cn07CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBnbG9iYWwgaGlzdG9yeSAtIHVzZXMgd2luZG93Lmhpc3RvcnkgYXMgdGhlIHNvdXJjZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBhCi8vIG1lbW9yeSBoaXN0b3J5CnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpOwp2YXIgZ2V0U291cmNlID0gZnVuY3Rpb24gZ2V0U291cmNlKCkgewogIHJldHVybiBjYW5Vc2VET00gPyB3aW5kb3cgOiBjcmVhdGVNZW1vcnlTb3VyY2UoKTsKfTsKCnZhciBnbG9iYWxIaXN0b3J5ID0gY3JlYXRlSGlzdG9yeShnZXRTb3VyY2UoKSk7CnZhciBuYXZpZ2F0ZSA9IGdsb2JhbEhpc3RvcnkubmF2aWdhdGU7CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKCgovKioqLyB9KSwKCi8qKiovICIuL25vZGVfbW9kdWxlcy9AcmVhY2gvcm91dGVyL2VzL2xpYi91dGlscy5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vbm9kZV9tb2R1bGVzL0ByZWFjaC9yb3V0ZXIvZXMvbGliL3V0aWxzLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHN0YXJ0c1dpdGgsIHBpY2ssIG1hdGNoLCByZXNvbHZlLCBpbnNlcnRQYXJhbXMsIHZhbGlkYXRlUmVkaXJlY3QgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInN0YXJ0c1dpdGgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0c1dpdGg7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwaWNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwaWNrOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibWF0Y2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIG1hdGNoOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicmVzb2x2ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzb2x2ZTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImluc2VydFBhcmFtcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zZXJ0UGFyYW1zOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAidmFsaWRhdGVSZWRpcmVjdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdmFsaWRhdGVSZWRpcmVjdDsgfSk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBpbnZhcmlhbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGludmFyaWFudCAqLyAiLi9ub2RlX21vZHVsZXMvaW52YXJpYW50L2Jyb3dzZXIuanMiKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGludmFyaWFudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGludmFyaWFudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTsKCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBzdGFydHNXaXRoKHN0cmluZywgc2VhcmNoKSAtIENoZWNrIGlmIGBzdHJpbmdgIHN0YXJ0cyB3aXRoIGBzZWFyY2hgCnZhciBzdGFydHNXaXRoID0gZnVuY3Rpb24gc3RhcnRzV2l0aChzdHJpbmcsIHNlYXJjaCkgewogIHJldHVybiBzdHJpbmcuc3Vic3RyKDAsIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7Cn07CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBwaWNrKHJvdXRlcywgdXJpKQovLwovLyBSYW5rcyBhbmQgcGlja3MgdGhlIGJlc3Qgcm91dGUgdG8gbWF0Y2guIEVhY2ggc2VnbWVudCBnZXRzIHRoZSBoaWdoZXN0Ci8vIGFtb3VudCBvZiBwb2ludHMsIHRoZW4gdGhlIHR5cGUgb2Ygc2VnbWVudCBnZXRzIGFuIGFkZGl0aW9uYWwgYW1vdW50IG9mCi8vIHBvaW50cyB3aGVyZQovLwovLyAgICAgc3RhdGljID4gZHluYW1pYyA+IHNwbGF0ID4gcm9vdAovLwovLyBUaGlzIHdheSB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBvcmRlciBvZiBvdXIgcm91dGVzLCBsZXQgdGhlCi8vIGNvbXB1dGVycyBkbyBpdC4KLy8KLy8gQSByb3V0ZSBsb29rcyBsaWtlIHRoaXMKLy8KLy8gICAgIHsgcGF0aCwgZGVmYXVsdCwgdmFsdWUgfQovLwovLyBBbmQgYSByZXR1cm5lZCBtYXRjaCBsb29rcyBsaWtlOgovLwovLyAgICAgeyByb3V0ZSwgcGFyYW1zLCB1cmkgfQovLwovLyBJIGtub3csIEkgc2hvdWxkIHVzZSBUeXBlU2NyaXB0IG5vdCBjb21tZW50cyBmb3IgdGhlc2UgdHlwZXMuCnZhciBwaWNrID0gZnVuY3Rpb24gcGljayhyb3V0ZXMsIHVyaSkgewogIHZhciBtYXRjaCA9IHZvaWQgMDsKICB2YXIgZGVmYXVsdF8gPSB2b2lkIDA7CgogIHZhciBfdXJpJHNwbGl0ID0gdXJpLnNwbGl0KCI/IiksCiAgICAgIHVyaVBhdGhuYW1lID0gX3VyaSRzcGxpdFswXTsKCiAgdmFyIHVyaVNlZ21lbnRzID0gc2VnbWVudGl6ZSh1cmlQYXRobmFtZSk7CiAgdmFyIGlzUm9vdFVyaSA9IHVyaVNlZ21lbnRzWzBdID09PSAiIjsKICB2YXIgcmFua2VkID0gcmFua1JvdXRlcyhyb3V0ZXMpOwoKICBmb3IgKHZhciBpID0gMCwgbCA9IHJhbmtlZC5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgIHZhciBtaXNzZWQgPSBmYWxzZTsKICAgIHZhciByb3V0ZSA9IHJhbmtlZFtpXS5yb3V0ZTsKCiAgICBpZiAocm91dGUuZGVmYXVsdCkgewogICAgICBkZWZhdWx0XyA9IHsKICAgICAgICByb3V0ZTogcm91dGUsCiAgICAgICAgcGFyYW1zOiB7fSwKICAgICAgICB1cmk6IHVyaQogICAgICB9OwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICB2YXIgcm91dGVTZWdtZW50cyA9IHNlZ21lbnRpemUocm91dGUucGF0aCk7CiAgICB2YXIgcGFyYW1zID0ge307CiAgICB2YXIgbWF4ID0gTWF0aC5tYXgodXJpU2VnbWVudHMubGVuZ3RoLCByb3V0ZVNlZ21lbnRzLmxlbmd0aCk7CiAgICB2YXIgaW5kZXggPSAwOwoKICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykgewogICAgICB2YXIgcm91dGVTZWdtZW50ID0gcm91dGVTZWdtZW50c1tpbmRleF07CiAgICAgIHZhciB1cmlTZWdtZW50ID0gdXJpU2VnbWVudHNbaW5kZXhdOwoKICAgICAgdmFyIF9pc1NwbGF0ID0gcm91dGVTZWdtZW50ID09PSAiKiI7CiAgICAgIGlmIChfaXNTcGxhdCkgewogICAgICAgIC8vIEhpdCBhIHNwbGF0LCBqdXN0IGdyYWIgdGhlIHJlc3QsIGFuZCByZXR1cm4gYSBtYXRjaAogICAgICAgIC8vIHVyaTogICAvZmlsZXMvZG9jdW1lbnRzL3dvcmsKICAgICAgICAvLyByb3V0ZTogL2ZpbGVzLyoKICAgICAgICBwYXJhbXNbIioiXSA9IHVyaVNlZ21lbnRzLnNsaWNlKGluZGV4KS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KS5qb2luKCIvIik7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGlmICh1cmlTZWdtZW50ID09PSB1bmRlZmluZWQpIHsKICAgICAgICAvLyBVUkkgaXMgc2hvcnRlciB0aGFuIHRoZSByb3V0ZSwgbm8gbWF0Y2gKICAgICAgICAvLyB1cmk6ICAgL3VzZXJzCiAgICAgICAgLy8gcm91dGU6IC91c2Vycy86dXNlcklkCiAgICAgICAgbWlzc2VkID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgdmFyIGR5bmFtaWNNYXRjaCA9IHBhcmFtUmUuZXhlYyhyb3V0ZVNlZ21lbnQpOwoKICAgICAgaWYgKGR5bmFtaWNNYXRjaCAmJiAhaXNSb290VXJpKSB7CiAgICAgICAgdmFyIG1hdGNoSXNOb3RSZXNlcnZlZCA9IHJlc2VydmVkTmFtZXMuaW5kZXhPZihkeW5hbWljTWF0Y2hbMV0pID09PSAtMTsKICAgICAgICAhbWF0Y2hJc05vdFJlc2VydmVkID8gIHRydWUgPyBpbnZhcmlhbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0KCkoZmFsc2UsICI8Um91dGVyPiBkeW5hbWljIHNlZ21lbnQgXCIiICsgZHluYW1pY01hdGNoWzFdICsgIlwiIGlzIGEgcmVzZXJ2ZWQgbmFtZS4gUGxlYXNlIHVzZSBhIGRpZmZlcmVudCBuYW1lIGluIHBhdGggXCIiICsgcm91dGUucGF0aCArICJcIi4iKSA6IHVuZGVmaW5lZCA6IHZvaWQgMDsKICAgICAgICB2YXIgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQodXJpU2VnbWVudCk7CiAgICAgICAgcGFyYW1zW2R5bmFtaWNNYXRjaFsxXV0gPSB2YWx1ZTsKICAgICAgfSBlbHNlIGlmIChyb3V0ZVNlZ21lbnQgIT09IHVyaVNlZ21lbnQpIHsKICAgICAgICAvLyBDdXJyZW50IHNlZ21lbnRzIGRvbid0IG1hdGNoLCBub3QgZHluYW1pYywgbm90IHNwbGF0LCBzbyBubyBtYXRjaAogICAgICAgIC8vIHVyaTogICAvdXNlcnMvMTIzL3NldHRpbmdzCiAgICAgICAgLy8gcm91dGU6IC91c2Vycy86aWQvcHJvZmlsZQogICAgICAgIG1pc3NlZCA9IHRydWU7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoIW1pc3NlZCkgewogICAgICBtYXRjaCA9IHsKICAgICAgICByb3V0ZTogcm91dGUsCiAgICAgICAgcGFyYW1zOiBwYXJhbXMsCiAgICAgICAgdXJpOiAiLyIgKyB1cmlTZWdtZW50cy5zbGljZSgwLCBpbmRleCkuam9pbigiLyIpCiAgICAgIH07CiAgICAgIGJyZWFrOwogICAgfQogIH0KCiAgcmV0dXJuIG1hdGNoIHx8IGRlZmF1bHRfIHx8IG51bGw7Cn07CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBtYXRjaChwYXRoLCB1cmkpIC0gTWF0Y2hlcyBqdXN0IG9uZSBwYXRoIHRvIGEgdXJpLCBhbHNvIGxvbAp2YXIgbWF0Y2ggPSBmdW5jdGlvbiBtYXRjaChwYXRoLCB1cmkpIHsKICByZXR1cm4gcGljayhbeyBwYXRoOiBwYXRoIH1dLCB1cmkpOwp9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gcmVzb2x2ZSh0bywgYmFzZXBhdGgpCi8vCi8vIFJlc29sdmVzIFVSSXMgYXMgdGhvdWdoIGV2ZXJ5IHBhdGggaXMgYSBkaXJlY3RvcnksIG5vIGZpbGVzLiAgUmVsYXRpdmUgVVJJcwovLyBpbiB0aGUgYnJvd3NlciBjYW4gZmVlbCBhd2t3YXJkIGJlY2F1c2Ugbm90IG9ubHkgY2FuIHlvdSBiZSAiaW4gYSBkaXJlY3RvcnkiCi8vIHlvdSBjYW4gYmUgImF0IGEgZmlsZSIsIHRvby4gRm9yIGV4YW1wbGUKLy8KLy8gICAgIGJyb3dzZXJTcGVjUmVzb2x2ZSgnZm9vJywgJy9iYXIvJykgPT4gL2Jhci9mb28KLy8gICAgIGJyb3dzZXJTcGVjUmVzb2x2ZSgnZm9vJywgJy9iYXInKSA9PiAvZm9vCi8vCi8vIEJ1dCBvbiB0aGUgY29tbWFuZCBsaW5lIG9mIGEgZmlsZSBzeXN0ZW0sIGl0J3Mgbm90IGFzIGNvbXBsaWNhdGVkLCB5b3UgY2FuJ3QKLy8gYGNkYCBmcm9tIGEgZmlsZSwgb25seSBkaXJlY3Rvcmllcy4gIFRoaXMgd2F5LCBsaW5rcyBoYXZlIHRvIGtub3cgbGVzcyBhYm91dAovLyB0aGVpciBjdXJyZW50IHBhdGguIFRvIGdvIGRlZXBlciB5b3UgY2FuIGRvIHRoaXM6Ci8vCi8vICAgICA8TGluayB0bz0iZGVlcGVyIi8+Ci8vICAgICAvLyBpbnN0ZWFkIG9mCi8vICAgICA8TGluayB0bz1geyR7cHJvcHMudXJpfS9kZWVwZXJ9YC8+Ci8vCi8vIEp1c3QgbGlrZSBgY2RgLCBpZiB5b3Ugd2FudCB0byBnbyBkZWVwZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB5b3UgZG8gdGhpczoKLy8KLy8gICAgIGNkIGRlZXBlcgovLyAgICAgIyBub3QKLy8gICAgIGNkICQocHdkKS9kZWVwZXIKLy8KLy8gQnkgdHJlYXRpbmcgZXZlcnkgcGF0aCBhcyBhIGRpcmVjdG9yeSwgbGlua2luZyB0byByZWxhdGl2ZSBwYXRocyBzaG91bGQKLy8gcmVxdWlyZSBsZXNzIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gYW5kIChmaW5nZXJzIGNyb3NzZWQpIGJlIG1vcmUgaW50dWl0aXZlLgp2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodG8sIGJhc2UpIHsKICAvLyAvZm9vL2JhciwgL2Jhei9xdXggPT4gL2Zvby9iYXIKICBpZiAoc3RhcnRzV2l0aCh0bywgIi8iKSkgewogICAgcmV0dXJuIHRvOwogIH0KCiAgdmFyIF90byRzcGxpdCA9IHRvLnNwbGl0KCI/IiksCiAgICAgIHRvUGF0aG5hbWUgPSBfdG8kc3BsaXRbMF0sCiAgICAgIHRvUXVlcnkgPSBfdG8kc3BsaXRbMV07CgogIHZhciBfYmFzZSRzcGxpdCA9IGJhc2Uuc3BsaXQoIj8iKSwKICAgICAgYmFzZVBhdGhuYW1lID0gX2Jhc2Ukc3BsaXRbMF07CgogIHZhciB0b1NlZ21lbnRzID0gc2VnbWVudGl6ZSh0b1BhdGhuYW1lKTsKICB2YXIgYmFzZVNlZ21lbnRzID0gc2VnbWVudGl6ZShiYXNlUGF0aG5hbWUpOwoKICAvLyA/YT1iLCAvdXNlcnM/Yj1jID0+IC91c2Vycz9hPWIKICBpZiAodG9TZWdtZW50c1swXSA9PT0gIiIpIHsKICAgIHJldHVybiBhZGRRdWVyeShiYXNlUGF0aG5hbWUsIHRvUXVlcnkpOwogIH0KCiAgLy8gcHJvZmlsZSwgL3VzZXJzLzc4OSA9PiAvdXNlcnMvNzg5L3Byb2ZpbGUKICBpZiAoIXN0YXJ0c1dpdGgodG9TZWdtZW50c1swXSwgIi4iKSkgewogICAgdmFyIHBhdGhuYW1lID0gYmFzZVNlZ21lbnRzLmNvbmNhdCh0b1NlZ21lbnRzKS5qb2luKCIvIik7CiAgICByZXR1cm4gYWRkUXVlcnkoKGJhc2VQYXRobmFtZSA9PT0gIi8iID8gIiIgOiAiLyIpICsgcGF0aG5hbWUsIHRvUXVlcnkpOwogIH0KCiAgLy8gLi8gICAgICAgICAvdXNlcnMvMTIzICA9PiAgL3VzZXJzLzEyMwogIC8vIC4uLyAgICAgICAgL3VzZXJzLzEyMyAgPT4gIC91c2VycwogIC8vIC4uLy4uICAgICAgL3VzZXJzLzEyMyAgPT4gIC8KICAvLyAuLi8uLi9vbmUgIC9hL2IvYy9kICAgID0+ICAvYS9iL29uZQogIC8vIC4uLy4vb25lICAgL2EvYi9jL2QgICAgPT4gIC9hL2IvYy9vbmUKICB2YXIgYWxsU2VnbWVudHMgPSBiYXNlU2VnbWVudHMuY29uY2F0KHRvU2VnbWVudHMpOwogIHZhciBzZWdtZW50cyA9IFtdOwogIGZvciAodmFyIGkgPSAwLCBsID0gYWxsU2VnbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICB2YXIgc2VnbWVudCA9IGFsbFNlZ21lbnRzW2ldOwogICAgaWYgKHNlZ21lbnQgPT09ICIuLiIpIHNlZ21lbnRzLnBvcCgpO2Vsc2UgaWYgKHNlZ21lbnQgIT09ICIuIikgc2VnbWVudHMucHVzaChzZWdtZW50KTsKICB9CgogIHJldHVybiBhZGRRdWVyeSgiLyIgKyBzZWdtZW50cy5qb2luKCIvIiksIHRvUXVlcnkpOwp9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gaW5zZXJ0UGFyYW1zKHBhdGgsIHBhcmFtcykKdmFyIGluc2VydFBhcmFtcyA9IGZ1bmN0aW9uIGluc2VydFBhcmFtcyhwYXRoLCBwYXJhbXMpIHsKICB2YXIgc2VnbWVudHMgPSBzZWdtZW50aXplKHBhdGgpOwogIHJldHVybiAiLyIgKyBzZWdtZW50cy5tYXAoZnVuY3Rpb24gKHNlZ21lbnQpIHsKICAgIHZhciBtYXRjaCA9IHBhcmFtUmUuZXhlYyhzZWdtZW50KTsKICAgIHJldHVybiBtYXRjaCA/IHBhcmFtc1ttYXRjaFsxXV0gOiBzZWdtZW50OwogIH0pLmpvaW4oIi8iKTsKfTsKCnZhciB2YWxpZGF0ZVJlZGlyZWN0ID0gZnVuY3Rpb24gdmFsaWRhdGVSZWRpcmVjdChmcm9tLCB0bykgewogIHZhciBmaWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoc2VnbWVudCkgewogICAgcmV0dXJuIGlzRHluYW1pYyhzZWdtZW50KTsKICB9OwogIHZhciBmcm9tU3RyaW5nID0gc2VnbWVudGl6ZShmcm9tKS5maWx0ZXIoZmlsdGVyKS5zb3J0KCkuam9pbigiLyIpOwogIHZhciB0b1N0cmluZyA9IHNlZ21lbnRpemUodG8pLmZpbHRlcihmaWx0ZXIpLnNvcnQoKS5qb2luKCIvIik7CiAgcmV0dXJuIGZyb21TdHJpbmcgPT09IHRvU3RyaW5nOwp9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gSnVuawp2YXIgcGFyYW1SZSA9IC9eOiguKykvOwoKdmFyIFNFR01FTlRfUE9JTlRTID0gNDsKdmFyIFNUQVRJQ19QT0lOVFMgPSAzOwp2YXIgRFlOQU1JQ19QT0lOVFMgPSAyOwp2YXIgU1BMQVRfUEVOQUxUWSA9IDE7CnZhciBST09UX1BPSU5UUyA9IDE7Cgp2YXIgaXNSb290U2VnbWVudCA9IGZ1bmN0aW9uIGlzUm9vdFNlZ21lbnQoc2VnbWVudCkgewogIHJldHVybiBzZWdtZW50ID09PSAiIjsKfTsKdmFyIGlzRHluYW1pYyA9IGZ1bmN0aW9uIGlzRHluYW1pYyhzZWdtZW50KSB7CiAgcmV0dXJuIHBhcmFtUmUudGVzdChzZWdtZW50KTsKfTsKdmFyIGlzU3BsYXQgPSBmdW5jdGlvbiBpc1NwbGF0KHNlZ21lbnQpIHsKICByZXR1cm4gc2VnbWVudCA9PT0gIioiOwp9OwoKdmFyIHJhbmtSb3V0ZSA9IGZ1bmN0aW9uIHJhbmtSb3V0ZShyb3V0ZSwgaW5kZXgpIHsKICB2YXIgc2NvcmUgPSByb3V0ZS5kZWZhdWx0ID8gMCA6IHNlZ21lbnRpemUocm91dGUucGF0aCkucmVkdWNlKGZ1bmN0aW9uIChzY29yZSwgc2VnbWVudCkgewogICAgc2NvcmUgKz0gU0VHTUVOVF9QT0lOVFM7CiAgICBpZiAoaXNSb290U2VnbWVudChzZWdtZW50KSkgc2NvcmUgKz0gUk9PVF9QT0lOVFM7ZWxzZSBpZiAoaXNEeW5hbWljKHNlZ21lbnQpKSBzY29yZSArPSBEWU5BTUlDX1BPSU5UUztlbHNlIGlmIChpc1NwbGF0KHNlZ21lbnQpKSBzY29yZSAtPSBTRUdNRU5UX1BPSU5UUyArIFNQTEFUX1BFTkFMVFk7ZWxzZSBzY29yZSArPSBTVEFUSUNfUE9JTlRTOwogICAgcmV0dXJuIHNjb3JlOwogIH0sIDApOwogIHJldHVybiB7IHJvdXRlOiByb3V0ZSwgc2NvcmU6IHNjb3JlLCBpbmRleDogaW5kZXggfTsKfTsKCnZhciByYW5rUm91dGVzID0gZnVuY3Rpb24gcmFua1JvdXRlcyhyb3V0ZXMpIHsKICByZXR1cm4gcm91dGVzLm1hcChyYW5rUm91dGUpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKICAgIHJldHVybiBhLnNjb3JlIDwgYi5zY29yZSA/IDEgOiBhLnNjb3JlID4gYi5zY29yZSA/IC0xIDogYS5pbmRleCAtIGIuaW5kZXg7CiAgfSk7Cn07Cgp2YXIgc2VnbWVudGl6ZSA9IGZ1bmN0aW9uIHNlZ21lbnRpemUodXJpKSB7CiAgcmV0dXJuIHVyaQogIC8vIHN0cmlwIHN0YXJ0aW5nL2VuZGluZyBzbGFzaGVzCiAgLnJlcGxhY2UoLyheXC8rfFwvKyQpL2csICIiKS5zcGxpdCgiLyIpOwp9OwoKdmFyIGFkZFF1ZXJ5ID0gZnVuY3Rpb24gYWRkUXVlcnkocGF0aG5hbWUsIHF1ZXJ5KSB7CiAgcmV0dXJuIHBhdGhuYW1lICsgKHF1ZXJ5ID8gIj8iICsgcXVlcnkgOiAiIik7Cn07Cgp2YXIgcmVzZXJ2ZWROYW1lcyA9IFsidXJpIiwgInBhdGgiXTsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoKLyoqKi8gfSksCgovKioqLyAiLi9ub2RlX21vZHVsZXMvYW5zaS1odG1sL2luZGV4LmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vbm9kZV9tb2R1bGVzL2Fuc2ktaHRtbC9pbmRleC5qcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwoKCm1vZHVsZS5leHBvcnRzID0gYW5zaUhUTUwKCi8vIFJlZmVyZW5jZSB0byBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2Fuc2ktcmVnZXgKdmFyIF9yZWdBTlNJID0gLyg/Oig/Olx1MDAxYlxbKXxcdTAwOWIpKD86KD86WzAtOV17MSwzfSk/KD86KD86O1swLTldezAsM30pKik/W0EtTXxmLW1dKXxcdTAwMWJbQS1NXS8KCnZhciBfZGVmQ29sb3JzID0gewogIHJlc2V0OiBbJ2ZmZicsICcwMDAnXSwgLy8gW0ZPUkVHUk9VRF9DT0xPUiwgQkFDS0dST1VORF9DT0xPUl0KICBibGFjazogJzAwMCcsCiAgcmVkOiAnZmYwMDAwJywKICBncmVlbjogJzIwOTgwNScsCiAgeWVsbG93OiAnZThiZjAzJywKICBibHVlOiAnMDAwMGZmJywKICBtYWdlbnRhOiAnZmYwMGZmJywKICBjeWFuOiAnMDBmZmVlJywKICBsaWdodGdyZXk6ICdmMGYwZjAnLAogIGRhcmtncmV5OiAnODg4Jwp9CnZhciBfc3R5bGVzID0gewogIDMwOiAnYmxhY2snLAogIDMxOiAncmVkJywKICAzMjogJ2dyZWVuJywKICAzMzogJ3llbGxvdycsCiAgMzQ6ICdibHVlJywKICAzNTogJ21hZ2VudGEnLAogIDM2OiAnY3lhbicsCiAgMzc6ICdsaWdodGdyZXknCn0KdmFyIF9vcGVuVGFncyA9IHsKICAnMSc6ICdmb250LXdlaWdodDpib2xkJywgLy8gYm9sZAogICcyJzogJ29wYWNpdHk6MC41JywgLy8gZGltCiAgJzMnOiAnPGk+JywgLy8gaXRhbGljCiAgJzQnOiAnPHU+JywgLy8gdW5kZXJzY29yZQogICc4JzogJ2Rpc3BsYXk6bm9uZScsIC8vIGhpZGRlbgogICc5JzogJzxkZWw+JyAvLyBkZWxldGUKfQp2YXIgX2Nsb3NlVGFncyA9IHsKICAnMjMnOiAnPC9pPicsIC8vIHJlc2V0IGl0YWxpYwogICcyNCc6ICc8L3U+JywgLy8gcmVzZXQgdW5kZXJzY29yZQogICcyOSc6ICc8L2RlbD4nIC8vIHJlc2V0IGRlbGV0ZQp9Cgo7WzAsIDIxLCAyMiwgMjcsIDI4LCAzOSwgNDldLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICBfY2xvc2VUYWdzW25dID0gJzwvc3Bhbj4nCn0pCgovKioKICogQ29udmVydHMgdGV4dCB3aXRoIEFOU0kgY29sb3IgY29kZXMgdG8gSFRNTCBtYXJrdXAuCiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0CiAqIEByZXR1cm5zIHsqfQogKi8KZnVuY3Rpb24gYW5zaUhUTUwgKHRleHQpIHsKICAvLyBSZXR1cm5zIHRoZSB0ZXh0IGlmIHRoZSBzdHJpbmcgaGFzIG5vIEFOU0kgZXNjYXBlIGNvZGUuCiAgaWYgKCFfcmVnQU5TSS50ZXN0KHRleHQpKSB7CiAgICByZXR1cm4gdGV4dAogIH0KCiAgLy8gQ2FjaGUgb3BlbmVkIHNlcXVlbmNlLgogIHZhciBhbnNpQ29kZXMgPSBbXQogIC8vIFJlcGxhY2Ugd2l0aCBtYXJrdXAuCiAgdmFyIHJldCA9IHRleHQucmVwbGFjZSgvXDAzM1xbKFxkKykqbS9nLCBmdW5jdGlvbiAobWF0Y2gsIHNlcSkgewogICAgdmFyIG90ID0gX29wZW5UYWdzW3NlcV0KICAgIGlmIChvdCkgewogICAgICAvLyBJZiBjdXJyZW50IHNlcXVlbmNlIGhhcyBiZWVuIG9wZW5lZCwgY2xvc2UgaXQuCiAgICAgIGlmICghIX5hbnNpQ29kZXMuaW5kZXhPZihzZXEpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXh0cmEtYm9vbGVhbi1jYXN0CiAgICAgICAgYW5zaUNvZGVzLnBvcCgpCiAgICAgICAgcmV0dXJuICc8L3NwYW4+JwogICAgICB9CiAgICAgIC8vIE9wZW4gdGFnLgogICAgICBhbnNpQ29kZXMucHVzaChzZXEpCiAgICAgIHJldHVybiBvdFswXSA9PT0gJzwnID8gb3QgOiAnPHNwYW4gc3R5bGU9IicgKyBvdCArICc7Ij4nCiAgICB9CgogICAgdmFyIGN0ID0gX2Nsb3NlVGFnc1tzZXFdCiAgICBpZiAoY3QpIHsKICAgICAgLy8gUG9wIHNlcXVlbmNlCiAgICAgIGFuc2lDb2Rlcy5wb3AoKQogICAgICByZXR1cm4gY3QKICAgIH0KICAgIHJldHVybiAnJwogIH0pCgogIC8vIE1ha2Ugc3VyZSB0YWdzIGFyZSBjbG9zZWQuCiAgdmFyIGwgPSBhbnNpQ29kZXMubGVuZ3RoCiAgOyhsID4gMCkgJiYgKHJldCArPSBBcnJheShsICsgMSkuam9pbignPC9zcGFuPicpKQoKICByZXR1cm4gcmV0Cn0KCi8qKgogKiBDdXN0b21pemUgY29sb3JzLgogKiBAcGFyYW0ge09iamVjdH0gY29sb3JzIHJlZmVyZW5jZSB0byBfZGVmQ29sb3JzCiAqLwphbnNpSFRNTC5zZXRDb2xvcnMgPSBmdW5jdGlvbiAoY29sb3JzKSB7CiAgaWYgKHR5cGVvZiBjb2xvcnMgIT09ICdvYmplY3QnKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Bjb2xvcnNgIHBhcmFtZXRlciBtdXN0IGJlIGFuIE9iamVjdC4nKQogIH0KCiAgdmFyIF9maW5hbENvbG9ycyA9IHt9CiAgZm9yICh2YXIga2V5IGluIF9kZWZDb2xvcnMpIHsKICAgIHZhciBoZXggPSBjb2xvcnMuaGFzT3duUHJvcGVydHkoa2V5KSA/IGNvbG9yc1trZXldIDogbnVsbAogICAgaWYgKCFoZXgpIHsKICAgICAgX2ZpbmFsQ29sb3JzW2tleV0gPSBfZGVmQ29sb3JzW2tleV0KICAgICAgY29udGludWUKICAgIH0KICAgIGlmICgncmVzZXQnID09PSBrZXkpIHsKICAgICAgaWYgKHR5cGVvZiBoZXggPT09ICdzdHJpbmcnKSB7CiAgICAgICAgaGV4ID0gW2hleF0KICAgICAgfQogICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaGV4KSB8fCBoZXgubGVuZ3RoID09PSAwIHx8IGhleC5zb21lKGZ1bmN0aW9uIChoKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBoICE9PSAnc3RyaW5nJwogICAgICB9KSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHZhbHVlIG9mIGAnICsga2V5ICsgJ2AgcHJvcGVydHkgbXVzdCBiZSBhbiBBcnJheSBhbmQgZWFjaCBpdGVtIGNvdWxkIG9ubHkgYmUgYSBoZXggc3RyaW5nLCBlLmcuOiBGRjAwMDAnKQogICAgICB9CiAgICAgIHZhciBkZWZIZXhDb2xvciA9IF9kZWZDb2xvcnNba2V5XQogICAgICBpZiAoIWhleFswXSkgewogICAgICAgIGhleFswXSA9IGRlZkhleENvbG9yWzBdCiAgICAgIH0KICAgICAgaWYgKGhleC5sZW5ndGggPT09IDEgfHwgIWhleFsxXSkgewogICAgICAgIGhleCA9IFtoZXhbMF1dCiAgICAgICAgaGV4LnB1c2goZGVmSGV4Q29sb3JbMV0pCiAgICAgIH0KCiAgICAgIGhleCA9IGhleC5zbGljZSgwLCAyKQogICAgfSBlbHNlIGlmICh0eXBlb2YgaGV4ICE9PSAnc3RyaW5nJykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB2YWx1ZSBvZiBgJyArIGtleSArICdgIHByb3BlcnR5IG11c3QgYmUgYSBoZXggc3RyaW5nLCBlLmcuOiBGRjAwMDAnKQogICAgfQogICAgX2ZpbmFsQ29sb3JzW2tleV0gPSBoZXgKICB9CiAgX3NldFRhZ3MoX2ZpbmFsQ29sb3JzKQp9CgovKioKICogUmVzZXQgY29sb3JzLgogKi8KYW5zaUhUTUwucmVzZXQgPSBmdW5jdGlvbiAoKSB7CiAgX3NldFRhZ3MoX2RlZkNvbG9ycykKfQoKLyoqCiAqIEV4cG9zZSB0YWdzLCBpbmNsdWRpbmcgb3BlbiBhbmQgY2xvc2UuCiAqIEB0eXBlIHtPYmplY3R9CiAqLwphbnNpSFRNTC50YWdzID0ge30KCmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYW5zaUhUTUwudGFncywgJ29wZW4nLCB7CiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9vcGVuVGFncyB9CiAgfSkKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYW5zaUhUTUwudGFncywgJ2Nsb3NlJywgewogICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfY2xvc2VUYWdzIH0KICB9KQp9IGVsc2UgewogIGFuc2lIVE1MLnRhZ3Mub3BlbiA9IF9vcGVuVGFncwogIGFuc2lIVE1MLnRhZ3MuY2xvc2UgPSBfY2xvc2VUYWdzCn0KCmZ1bmN0aW9uIF9zZXRUYWdzIChjb2xvcnMpIHsKICAvLyByZXNldCBhbGwKICBfb3BlblRhZ3NbJzAnXSA9ICdmb250LXdlaWdodDpub3JtYWw7b3BhY2l0eToxO2NvbG9yOiMnICsgY29sb3JzLnJlc2V0WzBdICsgJztiYWNrZ3JvdW5kOiMnICsgY29sb3JzLnJlc2V0WzFdCiAgLy8gaW52ZXJzZQogIF9vcGVuVGFnc1snNyddID0gJ2NvbG9yOiMnICsgY29sb3JzLnJlc2V0WzFdICsgJztiYWNrZ3JvdW5kOiMnICsgY29sb3JzLnJlc2V0WzBdCiAgLy8gZGFyayBncmV5CiAgX29wZW5UYWdzWyc5MCddID0gJ2NvbG9yOiMnICsgY29sb3JzLmRhcmtncmV5CgogIGZvciAodmFyIGNvZGUgaW4gX3N0eWxlcykgewogICAgdmFyIGNvbG9yID0gX3N0eWxlc1tjb2RlXQogICAgdmFyIG9yaUNvbG9yID0gY29sb3JzW2NvbG9yXSB8fCAnMDAwJwogICAgX29wZW5UYWdzW2NvZGVdID0gJ2NvbG9yOiMnICsgb3JpQ29sb3IKICAgIGNvZGUgPSBwYXJzZUludChjb2RlKQogICAgX29wZW5UYWdzWyhjb2RlICsgMTApLnRvU3RyaW5nKCldID0gJ2JhY2tncm91bmQ6IycgKyBvcmlDb2xvcgogIH0KfQoKYW5zaUhUTUwucmVzZXQoKQoKCi8qKiovIH0pLAoKLyoqKi8gIi4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMgKioqIQogIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Cgptb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsKCXJldHVybiAvW1x1MDAxYlx1MDA5Yl1bWygpIzs/XSooPzpbMC05XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtUFJaY2YtbnFyeT0+PF0vZzsKfTsKCgovKioqLyB9KSwKCi8qKiovICIuL25vZGVfbW9kdWxlcy9hdXRoMC1qcy9kaXN0L2F1dGgwLm1pbi5lc20uanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi9ub2RlX21vZHVsZXMvYXV0aDAtanMvZGlzdC9hdXRoMC5taW4uZXNtLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBBdXRoZW50aWNhdGlvbiwgTWFuYWdlbWVudCwgV2ViQXV0aCwgdmVyc2lvbiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCwgc2V0SW1tZWRpYXRlKSB7LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXV0aGVudGljYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIEF1dGhlbnRpY2F0aW9uOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWFuYWdlbWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWFuYWdlbWVudDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkF1dGgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYkF1dGg7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJ2ZXJzaW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2ZXJzaW9uOyB9KTsKLyoqCiAqIGF1dGgwLWpzIHY5LjExLjMKICogQXV0aG9yOiBBdXRoMAogKiBEYXRlOiAyMDE5LTA4LTA1CiAqIExpY2Vuc2U6IE1JVAogKi8KCnZhciBjb21tb25qc0dsb2JhbD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZuLG1vZHVsZSl7cmV0dXJuIGZuKG1vZHVsZT17ZXhwb3J0czp7fX0sbW9kdWxlLmV4cG9ydHMpLG1vZHVsZS5leHBvcnRzfXZhciB1cmxKb2luPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKG1vZHVsZSl7dmFyIGNvbnRleHQsZGVmaW5pdGlvbjtjb250ZXh0PWNvbW1vbmpzR2xvYmFsLGRlZmluaXRpb249ZnVuY3Rpb24oKXtmdW5jdGlvbiBub3JtYWxpemUoc3RyQXJyYXkpe3ZhciByZXN1bHRBcnJheT1bXTtpZigwPT09c3RyQXJyYXkubGVuZ3RoKXJldHVybiIiO2lmKCJzdHJpbmciIT10eXBlb2Ygc3RyQXJyYXlbMF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrc3RyQXJyYXlbMF0pO2lmKHN0ckFycmF5WzBdLm1hdGNoKC9eW15cLzpdKzpcLyokLykmJnN0ckFycmF5Lmxlbmd0aD4xKXt2YXIgZmlyc3Q9c3RyQXJyYXkuc2hpZnQoKTtzdHJBcnJheVswXT1maXJzdCtzdHJBcnJheVswXX1zdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XC9cL1wvLyk/c3RyQXJyYXlbMF09c3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXlwvOl0rKTpcLyovLCIkMTovLy8iKTpzdHJBcnJheVswXT1zdHJBcnJheVswXS5yZXBsYWNlKC9eKFteXC86XSspOlwvKi8sIiQxOi8vIik7Zm9yKHZhciBpPTA7aTxzdHJBcnJheS5sZW5ndGg7aSsrKXt2YXIgY29tcG9uZW50PXN0ckFycmF5W2ldO2lmKCJzdHJpbmciIT10eXBlb2YgY29tcG9uZW50KXRocm93IG5ldyBUeXBlRXJyb3IoIlVybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK2NvbXBvbmVudCk7IiIhPT1jb21wb25lbnQmJihpPjAmJihjb21wb25lbnQ9Y29tcG9uZW50LnJlcGxhY2UoL15bXC9dKy8sIiIpKSxjb21wb25lbnQ9aTxzdHJBcnJheS5sZW5ndGgtMT9jb21wb25lbnQucmVwbGFjZSgvW1wvXSskLywiIik6Y29tcG9uZW50LnJlcGxhY2UoL1tcL10rJC8sIi8iKSxyZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCkpfXZhciBzdHI9cmVzdWx0QXJyYXkuam9pbigiLyIpLHBhcnRzPShzdHI9c3RyLnJlcGxhY2UoL1wvKFw/fCZ8I1teIV0pL2csIiQxIikpLnNwbGl0KCI/Iik7cmV0dXJuIHN0cj1wYXJ0cy5zaGlmdCgpKyhwYXJ0cy5sZW5ndGg+MD8iPyI6IiIpK3BhcnRzLmpvaW4oIiYiKX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbm9ybWFsaXplKCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfX0sbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZGVmaW5pdGlvbigpOmNvbnRleHQudXJsam9pbj1kZWZpbml0aW9uKCl9KSxoYXM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxpc0FycmF5PUFycmF5LmlzQXJyYXksaGV4VGFibGU9ZnVuY3Rpb24oKXtmb3IodmFyIGFycmF5PVtdLGk9MDtpPDI1NjsrK2kpYXJyYXkucHVzaCgiJSIrKChpPDE2PyIwIjoiIikraS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkpO3JldHVybiBhcnJheX0oKSxhcnJheVRvT2JqZWN0PWZ1bmN0aW9uKHNvdXJjZSxvcHRpb25zKXtmb3IodmFyIG9iaj1vcHRpb25zJiZvcHRpb25zLnBsYWluT2JqZWN0cz9PYmplY3QuY3JlYXRlKG51bGwpOnt9LGk9MDtpPHNvdXJjZS5sZW5ndGg7KytpKXZvaWQgMCE9PXNvdXJjZVtpXSYmKG9ialtpXT1zb3VyY2VbaV0pO3JldHVybiBvYmp9LHV0aWxzPXthcnJheVRvT2JqZWN0OmFycmF5VG9PYmplY3QsYXNzaWduOmZ1bmN0aW9uKHRhcmdldCxzb3VyY2Upe3JldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbihhY2Msa2V5KXtyZXR1cm4gYWNjW2tleV09c291cmNlW2tleV0sYWNjfSx0YXJnZXQpfSxjb21iaW5lOmZ1bmN0aW9uKGEsYil7cmV0dXJuW10uY29uY2F0KGEsYil9LGNvbXBhY3Q6ZnVuY3Rpb24odmFsdWUpe2Zvcih2YXIgcXVldWU9W3tvYmo6e286dmFsdWV9LHByb3A6Im8ifV0scmVmcz1bXSxpPTA7aTxxdWV1ZS5sZW5ndGg7KytpKWZvcih2YXIgaXRlbT1xdWV1ZVtpXSxvYmo9aXRlbS5vYmpbaXRlbS5wcm9wXSxrZXlzPU9iamVjdC5rZXlzKG9iaiksaj0wO2o8a2V5cy5sZW5ndGg7KytqKXt2YXIga2V5PWtleXNbal0sdmFsPW9ialtrZXldOyJvYmplY3QiPT10eXBlb2YgdmFsJiZudWxsIT09dmFsJiYtMT09PXJlZnMuaW5kZXhPZih2YWwpJiYocXVldWUucHVzaCh7b2JqOm9iaixwcm9wOmtleX0pLHJlZnMucHVzaCh2YWwpKX1yZXR1cm4gZnVuY3Rpb24ocXVldWUpe2Zvcig7cXVldWUubGVuZ3RoPjE7KXt2YXIgaXRlbT1xdWV1ZS5wb3AoKSxvYmo9aXRlbS5vYmpbaXRlbS5wcm9wXTtpZihpc0FycmF5KG9iaikpe2Zvcih2YXIgY29tcGFjdGVkPVtdLGo9MDtqPG9iai5sZW5ndGg7KytqKXZvaWQgMCE9PW9ialtqXSYmY29tcGFjdGVkLnB1c2gob2JqW2pdKTtpdGVtLm9ialtpdGVtLnByb3BdPWNvbXBhY3RlZH19fShxdWV1ZSksdmFsdWV9LGRlY29kZTpmdW5jdGlvbihzdHIsZGVjb2RlcixjaGFyc2V0KXt2YXIgc3RyV2l0aG91dFBsdXM9c3RyLnJlcGxhY2UoL1wrL2csIiAiKTtpZigiaXNvLTg4NTktMSI9PT1jaGFyc2V0KXJldHVybiBzdHJXaXRob3V0UGx1cy5yZXBsYWNlKC8lWzAtOWEtZl17Mn0vZ2ksdW5lc2NhcGUpO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cldpdGhvdXRQbHVzKX1jYXRjaChlKXtyZXR1cm4gc3RyV2l0aG91dFBsdXN9fSxlbmNvZGU6ZnVuY3Rpb24oc3RyLGRlZmF1bHRFbmNvZGVyLGNoYXJzZXQpe2lmKDA9PT1zdHIubGVuZ3RoKXJldHVybiBzdHI7dmFyIHN0cmluZz0ic3RyaW5nIj09dHlwZW9mIHN0cj9zdHI6U3RyaW5nKHN0cik7aWYoImlzby04ODU5LTEiPT09Y2hhcnNldClyZXR1cm4gZXNjYXBlKHN0cmluZykucmVwbGFjZSgvJXVbMC05YS1mXXs0fS9naSxmdW5jdGlvbigkMCl7cmV0dXJuIiUyNiUyMyIrcGFyc2VJbnQoJDAuc2xpY2UoMiksMTYpKyIlM0IifSk7Zm9yKHZhciBvdXQ9IiIsaT0wO2k8c3RyaW5nLmxlbmd0aDsrK2kpe3ZhciBjPXN0cmluZy5jaGFyQ29kZUF0KGkpOzQ1PT09Y3x8NDY9PT1jfHw5NT09PWN8fDEyNj09PWN8fGM+PTQ4JiZjPD01N3x8Yz49NjUmJmM8PTkwfHxjPj05NyYmYzw9MTIyP291dCs9c3RyaW5nLmNoYXJBdChpKTpjPDEyOD9vdXQrPWhleFRhYmxlW2NdOmM8MjA0OD9vdXQrPWhleFRhYmxlWzE5MnxjPj42XStoZXhUYWJsZVsxMjh8NjMmY106Yzw1NTI5Nnx8Yz49NTczNDQ/b3V0Kz1oZXhUYWJsZVsyMjR8Yz4+MTJdK2hleFRhYmxlWzEyOHxjPj42JjYzXStoZXhUYWJsZVsxMjh8NjMmY106KGkrPTEsYz02NTUzNisoKDEwMjMmYyk8PDEwfDEwMjMmc3RyaW5nLmNoYXJDb2RlQXQoaSkpLG91dCs9aGV4VGFibGVbMjQwfGM+PjE4XStoZXhUYWJsZVsxMjh8Yz4+MTImNjNdK2hleFRhYmxlWzEyOHxjPj42JjYzXStoZXhUYWJsZVsxMjh8NjMmY10pfXJldHVybiBvdXR9LGlzQnVmZmVyOmZ1bmN0aW9uKG9iail7cmV0dXJuISghb2JqfHwib2JqZWN0IiE9dHlwZW9mIG9ianx8IShvYmouY29uc3RydWN0b3ImJm9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpKX0saXNSZWdFeHA6ZnVuY3Rpb24ob2JqKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopfSxtZXJnZTpmdW5jdGlvbiBtZXJnZSh0YXJnZXQsc291cmNlLG9wdGlvbnMpe2lmKCFzb3VyY2UpcmV0dXJuIHRhcmdldDtpZigib2JqZWN0IiE9dHlwZW9mIHNvdXJjZSl7aWYoaXNBcnJheSh0YXJnZXQpKXRhcmdldC5wdXNoKHNvdXJjZSk7ZWxzZXtpZighdGFyZ2V0fHwib2JqZWN0IiE9dHlwZW9mIHRhcmdldClyZXR1cm5bdGFyZ2V0LHNvdXJjZV07KG9wdGlvbnMmJihvcHRpb25zLnBsYWluT2JqZWN0c3x8b3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpfHwhaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSxzb3VyY2UpKSYmKHRhcmdldFtzb3VyY2VdPSEwKX1yZXR1cm4gdGFyZ2V0fWlmKCF0YXJnZXR8fCJvYmplY3QiIT10eXBlb2YgdGFyZ2V0KXJldHVyblt0YXJnZXRdLmNvbmNhdChzb3VyY2UpO3ZhciBtZXJnZVRhcmdldD10YXJnZXQ7cmV0dXJuIGlzQXJyYXkodGFyZ2V0KSYmIWlzQXJyYXkoc291cmNlKSYmKG1lcmdlVGFyZ2V0PWFycmF5VG9PYmplY3QodGFyZ2V0LG9wdGlvbnMpKSxpc0FycmF5KHRhcmdldCkmJmlzQXJyYXkoc291cmNlKT8oc291cmNlLmZvckVhY2goZnVuY3Rpb24oaXRlbSxpKXtpZihoYXMuY2FsbCh0YXJnZXQsaSkpe3ZhciB0YXJnZXRJdGVtPXRhcmdldFtpXTt0YXJnZXRJdGVtJiYib2JqZWN0Ij09dHlwZW9mIHRhcmdldEl0ZW0mJml0ZW0mJiJvYmplY3QiPT10eXBlb2YgaXRlbT90YXJnZXRbaV09bWVyZ2UodGFyZ2V0SXRlbSxpdGVtLG9wdGlvbnMpOnRhcmdldC5wdXNoKGl0ZW0pfWVsc2UgdGFyZ2V0W2ldPWl0ZW19KSx0YXJnZXQpOk9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uKGFjYyxrZXkpe3ZhciB2YWx1ZT1zb3VyY2Vba2V5XTtyZXR1cm4gaGFzLmNhbGwoYWNjLGtleSk/YWNjW2tleV09bWVyZ2UoYWNjW2tleV0sdmFsdWUsb3B0aW9ucyk6YWNjW2tleV09dmFsdWUsYWNjfSxtZXJnZVRhcmdldCl9fSxyZXBsYWNlPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxwZXJjZW50VHdlbnRpZXM9LyUyMC9nLGZvcm1hdHM9e2RlZmF1bHQ6IlJGQzM5ODYiLGZvcm1hdHRlcnM6e1JGQzE3Mzg6ZnVuY3Rpb24odmFsdWUpe3JldHVybiByZXBsYWNlLmNhbGwodmFsdWUscGVyY2VudFR3ZW50aWVzLCIrIil9LFJGQzM5ODY6ZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZX19LFJGQzE3Mzg6IlJGQzE3MzgiLFJGQzM5ODY6IlJGQzM5ODYifSxoYXMkMT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGFycmF5UHJlZml4R2VuZXJhdG9ycz17YnJhY2tldHM6ZnVuY3Rpb24ocHJlZml4KXtyZXR1cm4gcHJlZml4KyJbXSJ9LGNvbW1hOiJjb21tYSIsaW5kaWNlczpmdW5jdGlvbihwcmVmaXgsa2V5KXtyZXR1cm4gcHJlZml4KyJbIitrZXkrIl0ifSxyZXBlYXQ6ZnVuY3Rpb24ocHJlZml4KXtyZXR1cm4gcHJlZml4fX0saXNBcnJheSQxPUFycmF5LmlzQXJyYXkscHVzaD1BcnJheS5wcm90b3R5cGUucHVzaCxwdXNoVG9BcnJheT1mdW5jdGlvbihhcnIsdmFsdWVPckFycmF5KXtwdXNoLmFwcGx5KGFycixpc0FycmF5JDEodmFsdWVPckFycmF5KT92YWx1ZU9yQXJyYXk6W3ZhbHVlT3JBcnJheV0pfSx0b0lTTz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyxkZWZhdWx0cz17YWRkUXVlcnlQcmVmaXg6ITEsYWxsb3dEb3RzOiExLGNoYXJzZXQ6InV0Zi04IixjaGFyc2V0U2VudGluZWw6ITEsZGVsaW1pdGVyOiImIixlbmNvZGU6ITAsZW5jb2Rlcjp1dGlscy5lbmNvZGUsZW5jb2RlVmFsdWVzT25seTohMSxmb3JtYXR0ZXI6Zm9ybWF0cy5mb3JtYXR0ZXJzW2Zvcm1hdHMuZGVmYXVsdF0saW5kaWNlczohMSxzZXJpYWxpemVEYXRlOmZ1bmN0aW9uKGRhdGUpe3JldHVybiB0b0lTTy5jYWxsKGRhdGUpfSxza2lwTnVsbHM6ITEsc3RyaWN0TnVsbEhhbmRsaW5nOiExfSxzdHJpbmdpZnk9ZnVuY3Rpb24gc3RyaW5naWZ5KG9iamVjdCxwcmVmaXgsZ2VuZXJhdGVBcnJheVByZWZpeCxzdHJpY3ROdWxsSGFuZGxpbmcsc2tpcE51bGxzLGVuY29kZXIsZmlsdGVyLHNvcnQsYWxsb3dEb3RzLHNlcmlhbGl6ZURhdGUsZm9ybWF0dGVyLGVuY29kZVZhbHVlc09ubHksY2hhcnNldCl7dmFyIG9iaj1vYmplY3Q7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGZpbHRlcj9vYmo9ZmlsdGVyKHByZWZpeCxvYmopOm9iaiBpbnN0YW5jZW9mIERhdGU/b2JqPXNlcmlhbGl6ZURhdGUob2JqKToiY29tbWEiPT09Z2VuZXJhdGVBcnJheVByZWZpeCYmaXNBcnJheSQxKG9iaikmJihvYmo9b2JqLmpvaW4oIiwiKSksbnVsbD09PW9iail7aWYoc3RyaWN0TnVsbEhhbmRsaW5nKXJldHVybiBlbmNvZGVyJiYhZW5jb2RlVmFsdWVzT25seT9lbmNvZGVyKHByZWZpeCxkZWZhdWx0cy5lbmNvZGVyLGNoYXJzZXQpOnByZWZpeDtvYmo9IiJ9aWYoInN0cmluZyI9PXR5cGVvZiBvYmp8fCJudW1iZXIiPT10eXBlb2Ygb2JqfHwiYm9vbGVhbiI9PXR5cGVvZiBvYmp8fHV0aWxzLmlzQnVmZmVyKG9iaikpcmV0dXJuIGVuY29kZXI/W2Zvcm1hdHRlcihlbmNvZGVWYWx1ZXNPbmx5P3ByZWZpeDplbmNvZGVyKHByZWZpeCxkZWZhdWx0cy5lbmNvZGVyLGNoYXJzZXQpKSsiPSIrZm9ybWF0dGVyKGVuY29kZXIob2JqLGRlZmF1bHRzLmVuY29kZXIsY2hhcnNldCkpXTpbZm9ybWF0dGVyKHByZWZpeCkrIj0iK2Zvcm1hdHRlcihTdHJpbmcob2JqKSldO3ZhciBvYmpLZXlzLHZhbHVlcz1bXTtpZih2b2lkIDA9PT1vYmopcmV0dXJuIHZhbHVlcztpZihpc0FycmF5JDEoZmlsdGVyKSlvYmpLZXlzPWZpbHRlcjtlbHNle3ZhciBrZXlzPU9iamVjdC5rZXlzKG9iaik7b2JqS2V5cz1zb3J0P2tleXMuc29ydChzb3J0KTprZXlzfWZvcih2YXIgaT0wO2k8b2JqS2V5cy5sZW5ndGg7KytpKXt2YXIga2V5PW9iaktleXNbaV07c2tpcE51bGxzJiZudWxsPT09b2JqW2tleV18fChpc0FycmF5JDEob2JqKT9wdXNoVG9BcnJheSh2YWx1ZXMsc3RyaW5naWZ5KG9ialtrZXldLCJmdW5jdGlvbiI9PXR5cGVvZiBnZW5lcmF0ZUFycmF5UHJlZml4P2dlbmVyYXRlQXJyYXlQcmVmaXgocHJlZml4LGtleSk6cHJlZml4LGdlbmVyYXRlQXJyYXlQcmVmaXgsc3RyaWN0TnVsbEhhbmRsaW5nLHNraXBOdWxscyxlbmNvZGVyLGZpbHRlcixzb3J0LGFsbG93RG90cyxzZXJpYWxpemVEYXRlLGZvcm1hdHRlcixlbmNvZGVWYWx1ZXNPbmx5LGNoYXJzZXQpKTpwdXNoVG9BcnJheSh2YWx1ZXMsc3RyaW5naWZ5KG9ialtrZXldLHByZWZpeCsoYWxsb3dEb3RzPyIuIitrZXk6IlsiK2tleSsiXSIpLGdlbmVyYXRlQXJyYXlQcmVmaXgsc3RyaWN0TnVsbEhhbmRsaW5nLHNraXBOdWxscyxlbmNvZGVyLGZpbHRlcixzb3J0LGFsbG93RG90cyxzZXJpYWxpemVEYXRlLGZvcm1hdHRlcixlbmNvZGVWYWx1ZXNPbmx5LGNoYXJzZXQpKSl9cmV0dXJuIHZhbHVlc30saGFzJDI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxkZWZhdWx0cyQxPXthbGxvd0RvdHM6ITEsYWxsb3dQcm90b3R5cGVzOiExLGFycmF5TGltaXQ6MjAsY2hhcnNldDoidXRmLTgiLGNoYXJzZXRTZW50aW5lbDohMSxjb21tYTohMSxkZWNvZGVyOnV0aWxzLmRlY29kZSxkZWxpbWl0ZXI6IiYiLGRlcHRoOjUsaWdub3JlUXVlcnlQcmVmaXg6ITEsaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiExLHBhcmFtZXRlckxpbWl0OjFlMyxwYXJzZUFycmF5czohMCxwbGFpbk9iamVjdHM6ITEsc3RyaWN0TnVsbEhhbmRsaW5nOiExfSxpbnRlcnByZXROdW1lcmljRW50aXRpZXM9ZnVuY3Rpb24oc3RyKXtyZXR1cm4gc3RyLnJlcGxhY2UoLyYjKFxkKyk7L2csZnVuY3Rpb24oJDAsbnVtYmVyU3RyKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChudW1iZXJTdHIsMTApKX0pfSxwYXJzZUtleXM9ZnVuY3Rpb24oZ2l2ZW5LZXksdmFsLG9wdGlvbnMpe2lmKGdpdmVuS2V5KXt2YXIga2V5PW9wdGlvbnMuYWxsb3dEb3RzP2dpdmVuS2V5LnJlcGxhY2UoL1wuKFteLltdKykvZywiWyQxXSIpOmdpdmVuS2V5LGNoaWxkPS8oXFtbXltcXV0qXSkvZyxzZWdtZW50PS8oXFtbXltcXV0qXSkvLmV4ZWMoa2V5KSxwYXJlbnQ9c2VnbWVudD9rZXkuc2xpY2UoMCxzZWdtZW50LmluZGV4KTprZXksa2V5cz1bXTtpZihwYXJlbnQpe2lmKCFvcHRpb25zLnBsYWluT2JqZWN0cyYmaGFzJDIuY2FsbChPYmplY3QucHJvdG90eXBlLHBhcmVudCkmJiFvcHRpb25zLmFsbG93UHJvdG90eXBlcylyZXR1cm47a2V5cy5wdXNoKHBhcmVudCl9Zm9yKHZhciBpPTA7bnVsbCE9PShzZWdtZW50PWNoaWxkLmV4ZWMoa2V5KSkmJmk8b3B0aW9ucy5kZXB0aDspe2lmKGkrPTEsIW9wdGlvbnMucGxhaW5PYmplY3RzJiZoYXMkMi5jYWxsKE9iamVjdC5wcm90b3R5cGUsc2VnbWVudFsxXS5zbGljZSgxLC0xKSkmJiFvcHRpb25zLmFsbG93UHJvdG90eXBlcylyZXR1cm47a2V5cy5wdXNoKHNlZ21lbnRbMV0pfXJldHVybiBzZWdtZW50JiZrZXlzLnB1c2goIlsiK2tleS5zbGljZShzZWdtZW50LmluZGV4KSsiXSIpLGZ1bmN0aW9uKGNoYWluLHZhbCxvcHRpb25zKXtmb3IodmFyIGxlYWY9dmFsLGk9Y2hhaW4ubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvYmoscm9vdD1jaGFpbltpXTtpZigiW10iPT09cm9vdCYmb3B0aW9ucy5wYXJzZUFycmF5cylvYmo9W10uY29uY2F0KGxlYWYpO2Vsc2V7b2JqPW9wdGlvbnMucGxhaW5PYmplY3RzP09iamVjdC5jcmVhdGUobnVsbCk6e307dmFyIGNsZWFuUm9vdD0iWyI9PT1yb290LmNoYXJBdCgwKSYmIl0iPT09cm9vdC5jaGFyQXQocm9vdC5sZW5ndGgtMSk/cm9vdC5zbGljZSgxLC0xKTpyb290LGluZGV4PXBhcnNlSW50KGNsZWFuUm9vdCwxMCk7b3B0aW9ucy5wYXJzZUFycmF5c3x8IiIhPT1jbGVhblJvb3Q/IWlzTmFOKGluZGV4KSYmcm9vdCE9PWNsZWFuUm9vdCYmU3RyaW5nKGluZGV4KT09PWNsZWFuUm9vdCYmaW5kZXg+PTAmJm9wdGlvbnMucGFyc2VBcnJheXMmJmluZGV4PD1vcHRpb25zLmFycmF5TGltaXQ/KG9iaj1bXSlbaW5kZXhdPWxlYWY6b2JqW2NsZWFuUm9vdF09bGVhZjpvYmo9ezA6bGVhZn19bGVhZj1vYmp9cmV0dXJuIGxlYWZ9KGtleXMsdmFsLG9wdGlvbnMpfX0sbGliX3BhcnNlPWZ1bmN0aW9uKHN0cixvcHRzKXt2YXIgb3B0aW9ucz1mdW5jdGlvbihvcHRzKXtpZighb3B0cylyZXR1cm4gZGVmYXVsdHMkMTtpZihudWxsIT09b3B0cy5kZWNvZGVyJiZ2b2lkIDAhPT1vcHRzLmRlY29kZXImJiJmdW5jdGlvbiIhPXR5cGVvZiBvcHRzLmRlY29kZXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVjb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4iKTtpZih2b2lkIDAhPT1vcHRzLmNoYXJzZXQmJiJ1dGYtOCIhPT1vcHRzLmNoYXJzZXQmJiJpc28tODg1OS0xIiE9PW9wdHMuY2hhcnNldCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkIik7dmFyIGNoYXJzZXQ9dm9pZCAwPT09b3B0cy5jaGFyc2V0P2RlZmF1bHRzJDEuY2hhcnNldDpvcHRzLmNoYXJzZXQ7cmV0dXJue2FsbG93RG90czp2b2lkIDA9PT1vcHRzLmFsbG93RG90cz9kZWZhdWx0cyQxLmFsbG93RG90czohIW9wdHMuYWxsb3dEb3RzLGFsbG93UHJvdG90eXBlczoiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmFsbG93UHJvdG90eXBlcz9vcHRzLmFsbG93UHJvdG90eXBlczpkZWZhdWx0cyQxLmFsbG93UHJvdG90eXBlcyxhcnJheUxpbWl0OiJudW1iZXIiPT10eXBlb2Ygb3B0cy5hcnJheUxpbWl0P29wdHMuYXJyYXlMaW1pdDpkZWZhdWx0cyQxLmFycmF5TGltaXQsY2hhcnNldDpjaGFyc2V0LGNoYXJzZXRTZW50aW5lbDoiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmNoYXJzZXRTZW50aW5lbD9vcHRzLmNoYXJzZXRTZW50aW5lbDpkZWZhdWx0cyQxLmNoYXJzZXRTZW50aW5lbCxjb21tYToiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmNvbW1hP29wdHMuY29tbWE6ZGVmYXVsdHMkMS5jb21tYSxkZWNvZGVyOiJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzLmRlY29kZXI/b3B0cy5kZWNvZGVyOmRlZmF1bHRzJDEuZGVjb2RlcixkZWxpbWl0ZXI6InN0cmluZyI9PXR5cGVvZiBvcHRzLmRlbGltaXRlcnx8dXRpbHMuaXNSZWdFeHAob3B0cy5kZWxpbWl0ZXIpP29wdHMuZGVsaW1pdGVyOmRlZmF1bHRzJDEuZGVsaW1pdGVyLGRlcHRoOiJudW1iZXIiPT10eXBlb2Ygb3B0cy5kZXB0aD9vcHRzLmRlcHRoOmRlZmF1bHRzJDEuZGVwdGgsaWdub3JlUXVlcnlQcmVmaXg6ITA9PT1vcHRzLmlnbm9yZVF1ZXJ5UHJlZml4LGludGVycHJldE51bWVyaWNFbnRpdGllczoiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcz9vcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllczpkZWZhdWx0cyQxLmludGVycHJldE51bWVyaWNFbnRpdGllcyxwYXJhbWV0ZXJMaW1pdDoibnVtYmVyIj09dHlwZW9mIG9wdHMucGFyYW1ldGVyTGltaXQ/b3B0cy5wYXJhbWV0ZXJMaW1pdDpkZWZhdWx0cyQxLnBhcmFtZXRlckxpbWl0LHBhcnNlQXJyYXlzOiExIT09b3B0cy5wYXJzZUFycmF5cyxwbGFpbk9iamVjdHM6ImJvb2xlYW4iPT10eXBlb2Ygb3B0cy5wbGFpbk9iamVjdHM/b3B0cy5wbGFpbk9iamVjdHM6ZGVmYXVsdHMkMS5wbGFpbk9iamVjdHMsc3RyaWN0TnVsbEhhbmRsaW5nOiJib29sZWFuIj09dHlwZW9mIG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nP29wdHMuc3RyaWN0TnVsbEhhbmRsaW5nOmRlZmF1bHRzJDEuc3RyaWN0TnVsbEhhbmRsaW5nfX0ob3B0cyk7aWYoIiI9PT1zdHJ8fG51bGw9PXN0cilyZXR1cm4gb3B0aW9ucy5wbGFpbk9iamVjdHM/T2JqZWN0LmNyZWF0ZShudWxsKTp7fTtmb3IodmFyIHRlbXBPYmo9InN0cmluZyI9PXR5cGVvZiBzdHI/ZnVuY3Rpb24oc3RyLG9wdGlvbnMpe3ZhciBpLG9iaj17fSxjbGVhblN0cj1vcHRpb25zLmlnbm9yZVF1ZXJ5UHJlZml4P3N0ci5yZXBsYWNlKC9eXD8vLCIiKTpzdHIsbGltaXQ9b3B0aW9ucy5wYXJhbWV0ZXJMaW1pdD09PTEvMD92b2lkIDA6b3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCxwYXJ0cz1jbGVhblN0ci5zcGxpdChvcHRpb25zLmRlbGltaXRlcixsaW1pdCksc2tpcEluZGV4PS0xLGNoYXJzZXQ9b3B0aW9ucy5jaGFyc2V0O2lmKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKWZvcihpPTA7aTxwYXJ0cy5sZW5ndGg7KytpKTA9PT1wYXJ0c1tpXS5pbmRleE9mKCJ1dGY4PSIpJiYoInV0Zjg9JUUyJTlDJTkzIj09PXBhcnRzW2ldP2NoYXJzZXQ9InV0Zi04IjoidXRmOD0lMjYlMjMxMDAwMyUzQiI9PT1wYXJ0c1tpXSYmKGNoYXJzZXQ9Imlzby04ODU5LTEiKSxza2lwSW5kZXg9aSxpPXBhcnRzLmxlbmd0aCk7Zm9yKGk9MDtpPHBhcnRzLmxlbmd0aDsrK2kpaWYoaSE9PXNraXBJbmRleCl7dmFyIGtleSx2YWwscGFydD1wYXJ0c1tpXSxicmFja2V0RXF1YWxzUG9zPXBhcnQuaW5kZXhPZigiXT0iKSxwb3M9LTE9PT1icmFja2V0RXF1YWxzUG9zP3BhcnQuaW5kZXhPZigiPSIpOmJyYWNrZXRFcXVhbHNQb3MrMTstMT09PXBvcz8oa2V5PW9wdGlvbnMuZGVjb2RlcihwYXJ0LGRlZmF1bHRzJDEuZGVjb2RlcixjaGFyc2V0KSx2YWw9b3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmc/bnVsbDoiIik6KGtleT1vcHRpb25zLmRlY29kZXIocGFydC5zbGljZSgwLHBvcyksZGVmYXVsdHMkMS5kZWNvZGVyLGNoYXJzZXQpLHZhbD1vcHRpb25zLmRlY29kZXIocGFydC5zbGljZShwb3MrMSksZGVmYXVsdHMkMS5kZWNvZGVyLGNoYXJzZXQpKSx2YWwmJm9wdGlvbnMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzJiYiaXNvLTg4NTktMSI9PT1jaGFyc2V0JiYodmFsPWludGVycHJldE51bWVyaWNFbnRpdGllcyh2YWwpKSx2YWwmJm9wdGlvbnMuY29tbWEmJnZhbC5pbmRleE9mKCIsIik+LTEmJih2YWw9dmFsLnNwbGl0KCIsIikpLGhhcyQyLmNhbGwob2JqLGtleSk/b2JqW2tleV09dXRpbHMuY29tYmluZShvYmpba2V5XSx2YWwpOm9ialtrZXldPXZhbH1yZXR1cm4gb2JqfShzdHIsb3B0aW9ucyk6c3RyLG9iaj1vcHRpb25zLnBsYWluT2JqZWN0cz9PYmplY3QuY3JlYXRlKG51bGwpOnt9LGtleXM9T2JqZWN0LmtleXModGVtcE9iaiksaT0wO2k8a2V5cy5sZW5ndGg7KytpKXt2YXIga2V5PWtleXNbaV0sbmV3T2JqPXBhcnNlS2V5cyhrZXksdGVtcE9ialtrZXldLG9wdGlvbnMpO29iaj11dGlscy5tZXJnZShvYmosbmV3T2JqLG9wdGlvbnMpfXJldHVybiB1dGlscy5jb21wYWN0KG9iail9LGxpYl9zdHJpbmdpZnk9ZnVuY3Rpb24ob2JqZWN0LG9wdHMpe3ZhciBvYmpLZXlzLG9iaj1vYmplY3Qsb3B0aW9ucz1mdW5jdGlvbihvcHRzKXtpZighb3B0cylyZXR1cm4gZGVmYXVsdHM7aWYobnVsbCE9PW9wdHMuZW5jb2RlciYmdm9pZCAwIT09b3B0cy5lbmNvZGVyJiYiZnVuY3Rpb24iIT10eXBlb2Ygb3B0cy5lbmNvZGVyKXRocm93IG5ldyBUeXBlRXJyb3IoIkVuY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uIik7dmFyIGNoYXJzZXQ9b3B0cy5jaGFyc2V0fHxkZWZhdWx0cy5jaGFyc2V0O2lmKHZvaWQgMCE9PW9wdHMuY2hhcnNldCYmInV0Zi04IiE9PW9wdHMuY2hhcnNldCYmImlzby04ODU5LTEiIT09b3B0cy5jaGFyc2V0KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkIik7dmFyIGZvcm1hdD1mb3JtYXRzLmRlZmF1bHQ7aWYodm9pZCAwIT09b3B0cy5mb3JtYXQpe2lmKCFoYXMkMS5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycyxvcHRzLmZvcm1hdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBmb3JtYXQgb3B0aW9uIHByb3ZpZGVkLiIpO2Zvcm1hdD1vcHRzLmZvcm1hdH12YXIgZm9ybWF0dGVyPWZvcm1hdHMuZm9ybWF0dGVyc1tmb3JtYXRdLGZpbHRlcj1kZWZhdWx0cy5maWx0ZXI7cmV0dXJuKCJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzLmZpbHRlcnx8aXNBcnJheSQxKG9wdHMuZmlsdGVyKSkmJihmaWx0ZXI9b3B0cy5maWx0ZXIpLHthZGRRdWVyeVByZWZpeDoiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmFkZFF1ZXJ5UHJlZml4P29wdHMuYWRkUXVlcnlQcmVmaXg6ZGVmYXVsdHMuYWRkUXVlcnlQcmVmaXgsYWxsb3dEb3RzOnZvaWQgMD09PW9wdHMuYWxsb3dEb3RzP2RlZmF1bHRzLmFsbG93RG90czohIW9wdHMuYWxsb3dEb3RzLGNoYXJzZXQ6Y2hhcnNldCxjaGFyc2V0U2VudGluZWw6ImJvb2xlYW4iPT10eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWw/b3B0cy5jaGFyc2V0U2VudGluZWw6ZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLGRlbGltaXRlcjp2b2lkIDA9PT1vcHRzLmRlbGltaXRlcj9kZWZhdWx0cy5kZWxpbWl0ZXI6b3B0cy5kZWxpbWl0ZXIsZW5jb2RlOiJib29sZWFuIj09dHlwZW9mIG9wdHMuZW5jb2RlP29wdHMuZW5jb2RlOmRlZmF1bHRzLmVuY29kZSxlbmNvZGVyOiJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzLmVuY29kZXI/b3B0cy5lbmNvZGVyOmRlZmF1bHRzLmVuY29kZXIsZW5jb2RlVmFsdWVzT25seToiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmVuY29kZVZhbHVlc09ubHk/b3B0cy5lbmNvZGVWYWx1ZXNPbmx5OmRlZmF1bHRzLmVuY29kZVZhbHVlc09ubHksZmlsdGVyOmZpbHRlcixmb3JtYXR0ZXI6Zm9ybWF0dGVyLHNlcmlhbGl6ZURhdGU6ImZ1bmN0aW9uIj09dHlwZW9mIG9wdHMuc2VyaWFsaXplRGF0ZT9vcHRzLnNlcmlhbGl6ZURhdGU6ZGVmYXVsdHMuc2VyaWFsaXplRGF0ZSxza2lwTnVsbHM6ImJvb2xlYW4iPT10eXBlb2Ygb3B0cy5za2lwTnVsbHM/b3B0cy5za2lwTnVsbHM6ZGVmYXVsdHMuc2tpcE51bGxzLHNvcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIG9wdHMuc29ydD9vcHRzLnNvcnQ6bnVsbCxzdHJpY3ROdWxsSGFuZGxpbmc6ImJvb2xlYW4iPT10eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmc/b3B0cy5zdHJpY3ROdWxsSGFuZGxpbmc6ZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nfX0ob3B0cyk7ImZ1bmN0aW9uIj09dHlwZW9mIG9wdGlvbnMuZmlsdGVyP29iaj0oMCxvcHRpb25zLmZpbHRlcikoIiIsb2JqKTppc0FycmF5JDEob3B0aW9ucy5maWx0ZXIpJiYob2JqS2V5cz1vcHRpb25zLmZpbHRlcik7dmFyIGFycmF5Rm9ybWF0LGtleXM9W107aWYoIm9iamVjdCIhPXR5cGVvZiBvYmp8fG51bGw9PT1vYmopcmV0dXJuIiI7YXJyYXlGb3JtYXQ9b3B0cyYmb3B0cy5hcnJheUZvcm1hdCBpbiBhcnJheVByZWZpeEdlbmVyYXRvcnM/b3B0cy5hcnJheUZvcm1hdDpvcHRzJiYiaW5kaWNlcyJpbiBvcHRzP29wdHMuaW5kaWNlcz8iaW5kaWNlcyI6InJlcGVhdCI6ImluZGljZXMiO3ZhciBnZW5lcmF0ZUFycmF5UHJlZml4PWFycmF5UHJlZml4R2VuZXJhdG9yc1thcnJheUZvcm1hdF07b2JqS2V5c3x8KG9iaktleXM9T2JqZWN0LmtleXMob2JqKSksb3B0aW9ucy5zb3J0JiZvYmpLZXlzLnNvcnQob3B0aW9ucy5zb3J0KTtmb3IodmFyIGk9MDtpPG9iaktleXMubGVuZ3RoOysraSl7dmFyIGtleT1vYmpLZXlzW2ldO29wdGlvbnMuc2tpcE51bGxzJiZudWxsPT09b2JqW2tleV18fHB1c2hUb0FycmF5KGtleXMsc3RyaW5naWZ5KG9ialtrZXldLGtleSxnZW5lcmF0ZUFycmF5UHJlZml4LG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nLG9wdGlvbnMuc2tpcE51bGxzLG9wdGlvbnMuZW5jb2RlP29wdGlvbnMuZW5jb2RlcjpudWxsLG9wdGlvbnMuZmlsdGVyLG9wdGlvbnMuc29ydCxvcHRpb25zLmFsbG93RG90cyxvcHRpb25zLnNlcmlhbGl6ZURhdGUsb3B0aW9ucy5mb3JtYXR0ZXIsb3B0aW9ucy5lbmNvZGVWYWx1ZXNPbmx5LG9wdGlvbnMuY2hhcnNldCkpfXZhciBqb2luZWQ9a2V5cy5qb2luKG9wdGlvbnMuZGVsaW1pdGVyKSxwcmVmaXg9ITA9PT1vcHRpb25zLmFkZFF1ZXJ5UHJlZml4PyI/IjoiIjtyZXR1cm4gb3B0aW9ucy5jaGFyc2V0U2VudGluZWwmJigiaXNvLTg4NTktMSI9PT1vcHRpb25zLmNoYXJzZXQ/cHJlZml4Kz0idXRmOD0lMjYlMjMxMDAwMyUzQiYiOnByZWZpeCs9InV0Zjg9JUUyJTlDJTkzJiIpLGpvaW5lZC5sZW5ndGg+MD9wcmVmaXgram9pbmVkOiIifSxjb21wb25lbnRFbWl0dGVyPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uKG1vZHVsZSl7ZnVuY3Rpb24gRW1pdHRlcihvYmope2lmKG9iailyZXR1cm4gZnVuY3Rpb24ob2JqKXtmb3IodmFyIGtleSBpbiBFbWl0dGVyLnByb3RvdHlwZSlvYmpba2V5XT1FbWl0dGVyLnByb3RvdHlwZVtrZXldO3JldHVybiBvYmp9KG9iail9bW9kdWxlLmV4cG9ydHM9RW1pdHRlcixFbWl0dGVyLnByb3RvdHlwZS5vbj1FbWl0dGVyLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGV2ZW50LGZuKXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8e30sKHRoaXMuX2NhbGxiYWNrc1siJCIrZXZlbnRdPXRoaXMuX2NhbGxiYWNrc1siJCIrZXZlbnRdfHxbXSkucHVzaChmbiksdGhpc30sRW1pdHRlci5wcm90b3R5cGUub25jZT1mdW5jdGlvbihldmVudCxmbil7ZnVuY3Rpb24gb24oKXt0aGlzLm9mZihldmVudCxvbiksZm4uYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBvbi5mbj1mbix0aGlzLm9uKGV2ZW50LG9uKSx0aGlzfSxFbWl0dGVyLnByb3RvdHlwZS5vZmY9RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPUVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZXZlbnQsZm4pe2lmKHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LDA9PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2NhbGxiYWNrcz17fSx0aGlzO3ZhciBjYixjYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzWyIkIitldmVudF07aWYoIWNhbGxiYWNrcylyZXR1cm4gdGhpcztpZigxPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBkZWxldGUgdGhpcy5fY2FsbGJhY2tzWyIkIitldmVudF0sdGhpcztmb3IodmFyIGk9MDtpPGNhbGxiYWNrcy5sZW5ndGg7aSsrKWlmKChjYj1jYWxsYmFja3NbaV0pPT09Zm58fGNiLmZuPT09Zm4pe2NhbGxiYWNrcy5zcGxpY2UoaSwxKTticmVha31yZXR1cm4gMD09PWNhbGxiYWNrcy5sZW5ndGgmJmRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbIiQiK2V2ZW50XSx0aGlzfSxFbWl0dGVyLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGV2ZW50KXt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fTtmb3IodmFyIGFyZ3M9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSksY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc1siJCIrZXZlbnRdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKWFyZ3NbaS0xXT1hcmd1bWVudHNbaV07aWYoY2FsbGJhY2tzKXtpPTA7Zm9yKHZhciBsZW49KGNhbGxiYWNrcz1jYWxsYmFja3Muc2xpY2UoMCkpLmxlbmd0aDtpPGxlbjsrK2kpY2FsbGJhY2tzW2ldLmFwcGx5KHRoaXMsYXJncyl9cmV0dXJuIHRoaXN9LEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihldmVudCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LHRoaXMuX2NhbGxiYWNrc1siJCIrZXZlbnRdfHxbXX0sRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzPWZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4hIXRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGh9fSk7dmFyIGlzT2JqZWN0XzE9ZnVuY3Rpb24ob2JqKXtyZXR1cm4gbnVsbCE9PW9iaiYmIm9iamVjdCI9PXR5cGVvZiBvYmp9LHJlcXVlc3RCYXNlPVJlcXVlc3RCYXNlO2Z1bmN0aW9uIFJlcXVlc3RCYXNlKG9iail7aWYob2JqKXJldHVybiBmdW5jdGlvbihvYmope2Zvcih2YXIga2V5IGluIFJlcXVlc3RCYXNlLnByb3RvdHlwZSlvYmpba2V5XT1SZXF1ZXN0QmFzZS5wcm90b3R5cGVba2V5XTtyZXR1cm4gb2JqfShvYmopfVJlcXVlc3RCYXNlLnByb3RvdHlwZS5jbGVhclRpbWVvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIpLGRlbGV0ZSB0aGlzLl90aW1lcixkZWxldGUgdGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIsdGhpc30sUmVxdWVzdEJhc2UucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGZuKXtyZXR1cm4gdGhpcy5fcGFyc2VyPWZuLHRoaXN9LFJlcXVlc3RCYXNlLnByb3RvdHlwZS5yZXNwb25zZVR5cGU9ZnVuY3Rpb24odmFsKXtyZXR1cm4gdGhpcy5fcmVzcG9uc2VUeXBlPXZhbCx0aGlzfSxSZXF1ZXN0QmFzZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKGZuKXtyZXR1cm4gdGhpcy5fc2VyaWFsaXplcj1mbix0aGlzfSxSZXF1ZXN0QmFzZS5wcm90b3R5cGUudGltZW91dD1mdW5jdGlvbihvcHRpb25zKXtpZighb3B0aW9uc3x8Im9iamVjdCIhPXR5cGVvZiBvcHRpb25zKXJldHVybiB0aGlzLl90aW1lb3V0PW9wdGlvbnMsdGhpcy5fcmVzcG9uc2VUaW1lb3V0PTAsdGhpcztmb3IodmFyIG9wdGlvbiBpbiBvcHRpb25zKXN3aXRjaChvcHRpb24pe2Nhc2UiZGVhZGxpbmUiOnRoaXMuX3RpbWVvdXQ9b3B0aW9ucy5kZWFkbGluZTticmVhaztjYXNlInJlc3BvbnNlIjp0aGlzLl9yZXNwb25zZVRpbWVvdXQ9b3B0aW9ucy5yZXNwb25zZTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVW5rbm93biB0aW1lb3V0IG9wdGlvbiIsb3B0aW9uKX1yZXR1cm4gdGhpc30sUmVxdWVzdEJhc2UucHJvdG90eXBlLnJldHJ5PWZ1bmN0aW9uKGNvdW50LGZuKXtyZXR1cm4gMCE9PWFyZ3VtZW50cy5sZW5ndGgmJiEwIT09Y291bnR8fChjb3VudD0xKSxjb3VudDw9MCYmKGNvdW50PTApLHRoaXMuX21heFJldHJpZXM9Y291bnQsdGhpcy5fcmV0cmllcz0wLHRoaXMuX3JldHJ5Q2FsbGJhY2s9Zm4sdGhpc307dmFyIEVSUk9SX0NPREVTPVsiRUNPTk5SRVNFVCIsIkVUSU1FRE9VVCIsIkVBRERSSU5GTyIsIkVTT0NLRVRUSU1FRE9VVCJdO1JlcXVlc3RCYXNlLnByb3RvdHlwZS5fc2hvdWxkUmV0cnk9ZnVuY3Rpb24oZXJyLHJlcyl7aWYoIXRoaXMuX21heFJldHJpZXN8fHRoaXMuX3JldHJpZXMrKz49dGhpcy5fbWF4UmV0cmllcylyZXR1cm4hMTtpZih0aGlzLl9yZXRyeUNhbGxiYWNrKXRyeXt2YXIgb3ZlcnJpZGU9dGhpcy5fcmV0cnlDYWxsYmFjayhlcnIscmVzKTtpZighMD09PW92ZXJyaWRlKXJldHVybiEwO2lmKCExPT09b3ZlcnJpZGUpcmV0dXJuITF9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX1pZihyZXMmJnJlcy5zdGF0dXMmJnJlcy5zdGF0dXM+PTUwMCYmNTAxIT1yZXMuc3RhdHVzKXJldHVybiEwO2lmKGVycil7aWYoZXJyLmNvZGUmJn5FUlJPUl9DT0RFUy5pbmRleE9mKGVyci5jb2RlKSlyZXR1cm4hMDtpZihlcnIudGltZW91dCYmIkVDT05OQUJPUlRFRCI9PWVyci5jb2RlKXJldHVybiEwO2lmKGVyci5jcm9zc0RvbWFpbilyZXR1cm4hMH1yZXR1cm4hMX0sUmVxdWVzdEJhc2UucHJvdG90eXBlLl9yZXRyeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsZWFyVGltZW91dCgpLHRoaXMucmVxJiYodGhpcy5yZXE9bnVsbCx0aGlzLnJlcT10aGlzLnJlcXVlc3QoKSksdGhpcy5fYWJvcnRlZD0hMSx0aGlzLnRpbWVkb3V0PSExLHRoaXMuX2VuZCgpfSxSZXF1ZXN0QmFzZS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7aWYoIXRoaXMuX2Z1bGxmaWxsZWRQcm9taXNlKXt2YXIgc2VsZj10aGlzO3RoaXMuX2VuZENhbGxlZCYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBzdXBlcmFnZW50IHJlcXVlc3Qgd2FzIHNlbnQgdHdpY2UsIGJlY2F1c2UgYm90aCAuZW5kKCkgYW5kIC50aGVuKCkgd2VyZSBjYWxsZWQuIE5ldmVyIGNhbGwgLmVuZCgpIGlmIHlvdSB1c2UgcHJvbWlzZXMiKSx0aGlzLl9mdWxsZmlsbGVkUHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpbm5lclJlc29sdmUsaW5uZXJSZWplY3Qpe3NlbGYuZW5kKGZ1bmN0aW9uKGVycixyZXMpe2Vycj9pbm5lclJlamVjdChlcnIpOmlubmVyUmVzb2x2ZShyZXMpfSl9KX1yZXR1cm4gdGhpcy5fZnVsbGZpbGxlZFByb21pc2UudGhlbihyZXNvbHZlLHJlamVjdCl9LFJlcXVlc3RCYXNlLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihjYil7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsY2IpfSxSZXF1ZXN0QmFzZS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGZuKXtyZXR1cm4gZm4odGhpcyksdGhpc30sUmVxdWVzdEJhc2UucHJvdG90eXBlLm9rPWZ1bmN0aW9uKGNiKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgY2IpdGhyb3cgRXJyb3IoIkNhbGxiYWNrIHJlcXVpcmVkIik7cmV0dXJuIHRoaXMuX29rQ2FsbGJhY2s9Y2IsdGhpc30sUmVxdWVzdEJhc2UucHJvdG90eXBlLl9pc1Jlc3BvbnNlT0s9ZnVuY3Rpb24ocmVzKXtyZXR1cm4hIXJlcyYmKHRoaXMuX29rQ2FsbGJhY2s/dGhpcy5fb2tDYWxsYmFjayhyZXMpOnJlcy5zdGF0dXM+PTIwMCYmcmVzLnN0YXR1czwzMDApfSxSZXF1ZXN0QmFzZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGZpZWxkKXtyZXR1cm4gdGhpcy5faGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldfSxSZXF1ZXN0QmFzZS5wcm90b3R5cGUuZ2V0SGVhZGVyPVJlcXVlc3RCYXNlLnByb3RvdHlwZS5nZXQsUmVxdWVzdEJhc2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihmaWVsZCx2YWwpe2lmKGlzT2JqZWN0XzEoZmllbGQpKXtmb3IodmFyIGtleSBpbiBmaWVsZCl0aGlzLnNldChrZXksZmllbGRba2V5XSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuX2hlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXT12YWwsdGhpcy5oZWFkZXJbZmllbGRdPXZhbCx0aGlzfSxSZXF1ZXN0QmFzZS5wcm90b3R5cGUudW5zZXQ9ZnVuY3Rpb24oZmllbGQpe3JldHVybiBkZWxldGUgdGhpcy5faGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldLGRlbGV0ZSB0aGlzLmhlYWRlcltmaWVsZF0sdGhpc30sUmVxdWVzdEJhc2UucHJvdG90eXBlLmZpZWxkPWZ1bmN0aW9uKG5hbWUsdmFsKXtpZihudWxsPT1uYW1lKXRocm93IG5ldyBFcnJvcigiLmZpZWxkKG5hbWUsIHZhbCkgbmFtZSBjYW4gbm90IGJlIGVtcHR5Iik7aWYodGhpcy5fZGF0YSYmY29uc29sZS5lcnJvcigiLmZpZWxkKCkgY2FuJ3QgYmUgdXNlZCBpZiAuc2VuZCgpIGlzIHVzZWQuIFBsZWFzZSB1c2Ugb25seSAuc2VuZCgpIG9yIG9ubHkgLmZpZWxkKCkgJiAuYXR0YWNoKCkiKSxpc09iamVjdF8xKG5hbWUpKXtmb3IodmFyIGtleSBpbiBuYW1lKXRoaXMuZmllbGQoa2V5LG5hbWVba2V5XSk7cmV0dXJuIHRoaXN9aWYoQXJyYXkuaXNBcnJheSh2YWwpKXtmb3IodmFyIGkgaW4gdmFsKXRoaXMuZmllbGQobmFtZSx2YWxbaV0pO3JldHVybiB0aGlzfWlmKG51bGw9PXZhbCl0aHJvdyBuZXcgRXJyb3IoIi5maWVsZChuYW1lLCB2YWwpIHZhbCBjYW4gbm90IGJlIGVtcHR5Iik7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdmFsJiYodmFsPSIiK3ZhbCksdGhpcy5fZ2V0Rm9ybURhdGEoKS5hcHBlbmQobmFtZSx2YWwpLHRoaXN9LFJlcXVlc3RCYXNlLnByb3RvdHlwZS5hYm9ydD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hYm9ydGVkP3RoaXM6KHRoaXMuX2Fib3J0ZWQ9ITAsdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksdGhpcy5yZXEmJnRoaXMucmVxLmFib3J0KCksdGhpcy5jbGVhclRpbWVvdXQoKSx0aGlzLmVtaXQoImFib3J0IiksdGhpcyl9LFJlcXVlc3RCYXNlLnByb3RvdHlwZS5fYXV0aD1mdW5jdGlvbih1c2VyLHBhc3Msb3B0aW9ucyxiYXNlNjRFbmNvZGVyKXtzd2l0Y2gob3B0aW9ucy50eXBlKXtjYXNlImJhc2ljIjp0aGlzLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYmFzZTY0RW5jb2Rlcih1c2VyKyI6IitwYXNzKSk7YnJlYWs7Y2FzZSJhdXRvIjp0aGlzLnVzZXJuYW1lPXVzZXIsdGhpcy5wYXNzd29yZD1wYXNzO2JyZWFrO2Nhc2UiYmVhcmVyIjp0aGlzLnNldCgiQXV0aG9yaXphdGlvbiIsIkJlYXJlciAiK3VzZXIpfXJldHVybiB0aGlzfSxSZXF1ZXN0QmFzZS5wcm90b3R5cGUud2l0aENyZWRlbnRpYWxzPWZ1bmN0aW9uKG9uKXtyZXR1cm4gbnVsbD09b24mJihvbj0hMCksdGhpcy5fd2l0aENyZWRlbnRpYWxzPW9uLHRoaXN9LFJlcXVlc3RCYXNlLnByb3RvdHlwZS5yZWRpcmVjdHM9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX21heFJlZGlyZWN0cz1uLHRoaXN9LFJlcXVlc3RCYXNlLnByb3RvdHlwZS5tYXhSZXNwb25zZVNpemU9ZnVuY3Rpb24obil7aWYoIm51bWJlciIhPXR5cGVvZiBuKXRocm93IFR5cGVFcnJvcigiSW52YWxpZCBhcmd1bWVudCIpO3JldHVybiB0aGlzLl9tYXhSZXNwb25zZVNpemU9bix0aGlzfSxSZXF1ZXN0QmFzZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21ldGhvZDp0aGlzLm1ldGhvZCx1cmw6dGhpcy51cmwsZGF0YTp0aGlzLl9kYXRhLGhlYWRlcnM6dGhpcy5faGVhZGVyfX0sUmVxdWVzdEJhc2UucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oZGF0YSl7dmFyIGlzT2JqPWlzT2JqZWN0XzEoZGF0YSksdHlwZT10aGlzLl9oZWFkZXJbImNvbnRlbnQtdHlwZSJdO2lmKHRoaXMuX2Zvcm1EYXRhJiZjb25zb2xlLmVycm9yKCIuc2VuZCgpIGNhbid0IGJlIHVzZWQgaWYgLmF0dGFjaCgpIG9yIC5maWVsZCgpIGlzIHVzZWQuIFBsZWFzZSB1c2Ugb25seSAuc2VuZCgpIG9yIG9ubHkgLmZpZWxkKCkgJiAuYXR0YWNoKCkiKSxpc09iaiYmIXRoaXMuX2RhdGEpQXJyYXkuaXNBcnJheShkYXRhKT90aGlzLl9kYXRhPVtdOnRoaXMuX2lzSG9zdChkYXRhKXx8KHRoaXMuX2RhdGE9e30pO2Vsc2UgaWYoZGF0YSYmdGhpcy5fZGF0YSYmdGhpcy5faXNIb3N0KHRoaXMuX2RhdGEpKXRocm93IEVycm9yKCJDYW4ndCBtZXJnZSB0aGVzZSBzZW5kIGNhbGxzIik7aWYoaXNPYmomJmlzT2JqZWN0XzEodGhpcy5fZGF0YSkpZm9yKHZhciBrZXkgaW4gZGF0YSl0aGlzLl9kYXRhW2tleV09ZGF0YVtrZXldO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGRhdGE/KHR5cGV8fHRoaXMudHlwZSgiZm9ybSIpLHR5cGU9dGhpcy5faGVhZGVyWyJjb250ZW50LXR5cGUiXSx0aGlzLl9kYXRhPSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiPT10eXBlP3RoaXMuX2RhdGE/dGhpcy5fZGF0YSsiJiIrZGF0YTpkYXRhOih0aGlzLl9kYXRhfHwiIikrZGF0YSk6dGhpcy5fZGF0YT1kYXRhO3JldHVybiFpc09ianx8dGhpcy5faXNIb3N0KGRhdGEpP3RoaXM6KHR5cGV8fHRoaXMudHlwZSgianNvbiIpLHRoaXMpfSxSZXF1ZXN0QmFzZS5wcm90b3R5cGUuc29ydFF1ZXJ5PWZ1bmN0aW9uKHNvcnQpe3JldHVybiB0aGlzLl9zb3J0PXZvaWQgMD09PXNvcnR8fHNvcnQsdGhpc30sUmVxdWVzdEJhc2UucHJvdG90eXBlLl9maW5hbGl6ZVF1ZXJ5U3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHF1ZXJ5PXRoaXMuX3F1ZXJ5LmpvaW4oIiYiKTtpZihxdWVyeSYmKHRoaXMudXJsKz0odGhpcy51cmwuaW5kZXhPZigiPyIpPj0wPyImIjoiPyIpK3F1ZXJ5KSx0aGlzLl9xdWVyeS5sZW5ndGg9MCx0aGlzLl9zb3J0KXt2YXIgaW5kZXg9dGhpcy51cmwuaW5kZXhPZigiPyIpO2lmKGluZGV4Pj0wKXt2YXIgcXVlcnlBcnI9dGhpcy51cmwuc3Vic3RyaW5nKGluZGV4KzEpLnNwbGl0KCImIik7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX3NvcnQ/cXVlcnlBcnIuc29ydCh0aGlzLl9zb3J0KTpxdWVyeUFyci5zb3J0KCksdGhpcy51cmw9dGhpcy51cmwuc3Vic3RyaW5nKDAsaW5kZXgpKyI/IitxdWVyeUFyci5qb2luKCImIil9fX0sUmVxdWVzdEJhc2UucHJvdG90eXBlLl9hcHBlbmRRdWVyeVN0cmluZz1mdW5jdGlvbigpe2NvbnNvbGUudHJhY2UoIlVuc3VwcG9ydGVkIil9LFJlcXVlc3RCYXNlLnByb3RvdHlwZS5fdGltZW91dEVycm9yPWZ1bmN0aW9uKHJlYXNvbix0aW1lb3V0LGVycm5vKXtpZighdGhpcy5fYWJvcnRlZCl7dmFyIGVycj1uZXcgRXJyb3IocmVhc29uK3RpbWVvdXQrIm1zIGV4Y2VlZGVkIik7ZXJyLnRpbWVvdXQ9dGltZW91dCxlcnIuY29kZT0iRUNPTk5BQk9SVEVEIixlcnIuZXJybm89ZXJybm8sdGhpcy50aW1lZG91dD0hMCx0aGlzLmFib3J0KCksdGhpcy5jYWxsYmFjayhlcnIpfX0sUmVxdWVzdEJhc2UucHJvdG90eXBlLl9zZXRUaW1lb3V0cz1mdW5jdGlvbigpe3ZhciBzZWxmPXRoaXM7dGhpcy5fdGltZW91dCYmIXRoaXMuX3RpbWVyJiYodGhpcy5fdGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3NlbGYuX3RpbWVvdXRFcnJvcigiVGltZW91dCBvZiAiLHNlbGYuX3RpbWVvdXQsIkVUSU1FIil9LHRoaXMuX3RpbWVvdXQpKSx0aGlzLl9yZXNwb25zZVRpbWVvdXQmJiF0aGlzLl9yZXNwb25zZVRpbWVvdXRUaW1lciYmKHRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZWxmLl90aW1lb3V0RXJyb3IoIlJlc3BvbnNlIHRpbWVvdXQgb2YgIixzZWxmLl9yZXNwb25zZVRpbWVvdXQsIkVUSU1FRE9VVCIpfSx0aGlzLl9yZXNwb25zZVRpbWVvdXQpKX07dmFyIHV0aWxzJDFfdHlwZT1mdW5jdGlvbihzdHIpe3JldHVybiBzdHIuc3BsaXQoLyAqOyAqLykuc2hpZnQoKX0sdXRpbHMkMV9wYXJhbXM9ZnVuY3Rpb24oc3RyKXtyZXR1cm4gc3RyLnNwbGl0KC8gKjsgKi8pLnJlZHVjZShmdW5jdGlvbihvYmosc3RyKXt2YXIgcGFydHM9c3RyLnNwbGl0KC8gKj0gKi8pLGtleT1wYXJ0cy5zaGlmdCgpLHZhbD1wYXJ0cy5zaGlmdCgpO3JldHVybiBrZXkmJnZhbCYmKG9ialtrZXldPXZhbCksb2JqfSx7fSl9LHV0aWxzJDFfcGFyc2VMaW5rcz1mdW5jdGlvbihzdHIpe3JldHVybiBzdHIuc3BsaXQoLyAqLCAqLykucmVkdWNlKGZ1bmN0aW9uKG9iaixzdHIpe3ZhciBwYXJ0cz1zdHIuc3BsaXQoLyAqOyAqLyksdXJsPXBhcnRzWzBdLnNsaWNlKDEsLTEpO3JldHVybiBvYmpbcGFydHNbMV0uc3BsaXQoLyAqPSAqLylbMV0uc2xpY2UoMSwtMSldPXVybCxvYmp9LHt9KX0scmVzcG9uc2VCYXNlPVJlc3BvbnNlQmFzZTtmdW5jdGlvbiBSZXNwb25zZUJhc2Uob2JqKXtpZihvYmopcmV0dXJuIGZ1bmN0aW9uKG9iail7Zm9yKHZhciBrZXkgaW4gUmVzcG9uc2VCYXNlLnByb3RvdHlwZSlvYmpba2V5XT1SZXNwb25zZUJhc2UucHJvdG90eXBlW2tleV07cmV0dXJuIG9ian0ob2JqKX1mdW5jdGlvbiBBZ2VudCgpe3RoaXMuX2RlZmF1bHRzPVtdfVJlc3BvbnNlQmFzZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGZpZWxkKXtyZXR1cm4gdGhpcy5oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV19LFJlc3BvbnNlQmFzZS5wcm90b3R5cGUuX3NldEhlYWRlclByb3BlcnRpZXM9ZnVuY3Rpb24oaGVhZGVyKXt2YXIgY3Q9aGVhZGVyWyJjb250ZW50LXR5cGUiXXx8IiI7dGhpcy50eXBlPXV0aWxzJDFfdHlwZShjdCk7dmFyIHBhcmFtcz11dGlscyQxX3BhcmFtcyhjdCk7Zm9yKHZhciBrZXkgaW4gcGFyYW1zKXRoaXNba2V5XT1wYXJhbXNba2V5XTt0aGlzLmxpbmtzPXt9O3RyeXtoZWFkZXIubGluayYmKHRoaXMubGlua3M9dXRpbHMkMV9wYXJzZUxpbmtzKGhlYWRlci5saW5rKSl9Y2F0Y2goZXJyKXt9fSxSZXNwb25zZUJhc2UucHJvdG90eXBlLl9zZXRTdGF0dXNQcm9wZXJ0aWVzPWZ1bmN0aW9uKHN0YXR1cyl7dmFyIHR5cGU9c3RhdHVzLzEwMHwwO3RoaXMuc3RhdHVzPXRoaXMuc3RhdHVzQ29kZT1zdGF0dXMsdGhpcy5zdGF0dXNUeXBlPXR5cGUsdGhpcy5pbmZvPTE9PXR5cGUsdGhpcy5vaz0yPT10eXBlLHRoaXMucmVkaXJlY3Q9Mz09dHlwZSx0aGlzLmNsaWVudEVycm9yPTQ9PXR5cGUsdGhpcy5zZXJ2ZXJFcnJvcj01PT10eXBlLHRoaXMuZXJyb3I9KDQ9PXR5cGV8fDU9PXR5cGUpJiZ0aGlzLnRvRXJyb3IoKSx0aGlzLmNyZWF0ZWQ9MjAxPT1zdGF0dXMsdGhpcy5hY2NlcHRlZD0yMDI9PXN0YXR1cyx0aGlzLm5vQ29udGVudD0yMDQ9PXN0YXR1cyx0aGlzLmJhZFJlcXVlc3Q9NDAwPT1zdGF0dXMsdGhpcy51bmF1dGhvcml6ZWQ9NDAxPT1zdGF0dXMsdGhpcy5ub3RBY2NlcHRhYmxlPTQwNj09c3RhdHVzLHRoaXMuZm9yYmlkZGVuPTQwMz09c3RhdHVzLHRoaXMubm90Rm91bmQ9NDA0PT1zdGF0dXMsdGhpcy51bnByb2Nlc3NhYmxlRW50aXR5PTQyMj09c3RhdHVzfSxbInVzZSIsIm9uIiwib25jZSIsInNldCIsInF1ZXJ5IiwidHlwZSIsImFjY2VwdCIsImF1dGgiLCJ3aXRoQ3JlZGVudGlhbHMiLCJzb3J0UXVlcnkiLCJyZXRyeSIsIm9rIiwicmVkaXJlY3RzIiwidGltZW91dCIsImJ1ZmZlciIsInNlcmlhbGl6ZSIsInBhcnNlIiwiY2EiLCJrZXkiLCJwZngiLCJjZXJ0Il0uZm9yRWFjaChmdW5jdGlvbihmbil7QWdlbnQucHJvdG90eXBlW2ZuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0cy5wdXNoKHtmbjpmbixhcmd1bWVudHM6YXJndW1lbnRzfSksdGhpc319KSxBZ2VudC5wcm90b3R5cGUuX3NldERlZmF1bHRzPWZ1bmN0aW9uKHJlcSl7dGhpcy5fZGVmYXVsdHMuZm9yRWFjaChmdW5jdGlvbihkZWYpe3JlcVtkZWYuZm5dLmFwcGx5KHJlcSxkZWYuYXJndW1lbnRzKX0pfTtmb3IodmFyIGFnZW50QmFzZT1BZ2VudCxjbGllbnQ9Y3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe3ZhciByb290O2Z1bmN0aW9uIG5vb3AoKXt9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/cm9vdD13aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3Jvb3Q9c2VsZjooY29uc29sZS53YXJuKCJVc2luZyBicm93c2VyLW9ubHkgdmVyc2lvbiBvZiBzdXBlcmFnZW50IGluIG5vbi1icm93c2VyIGVudmlyb25tZW50Iikscm9vdD1jb21tb25qc0dsb2JhbCk7dmFyIHJlcXVlc3Q9ZXhwb3J0cz1tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihtZXRob2QsdXJsKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdXJsP25ldyBleHBvcnRzLlJlcXVlc3QoIkdFVCIsbWV0aG9kKS5lbmQodXJsKToxPT1hcmd1bWVudHMubGVuZ3RoP25ldyBleHBvcnRzLlJlcXVlc3QoIkdFVCIsbWV0aG9kKTpuZXcgZXhwb3J0cy5SZXF1ZXN0KG1ldGhvZCx1cmwpfTtleHBvcnRzLlJlcXVlc3Q9UmVxdWVzdCxyZXF1ZXN0LmdldFhIUj1mdW5jdGlvbigpe2lmKCEoIXJvb3QuWE1MSHR0cFJlcXVlc3R8fHJvb3QubG9jYXRpb24mJiJmaWxlOiI9PXJvb3QubG9jYXRpb24ucHJvdG9jb2wmJnJvb3QuQWN0aXZlWE9iamVjdCkpcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdDt0cnl7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGUpe310cnl7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUC42LjAiKX1jYXRjaChlKXt9dHJ5e3JldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAuMy4wIil9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIil9Y2F0Y2goZSl7fXRocm93IEVycm9yKCJCcm93c2VyLW9ubHkgdmVyc2lvbiBvZiBzdXBlcmFnZW50IGNvdWxkIG5vdCBmaW5kIFhIUiIpfTt2YXIgdHJpbT0iIi50cmltP2Z1bmN0aW9uKHMpe3JldHVybiBzLnRyaW0oKX06ZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZSgvKF5ccyp8XHMqJCkvZywiIil9O2Z1bmN0aW9uIHNlcmlhbGl6ZShvYmope2lmKCFpc09iamVjdF8xKG9iaikpcmV0dXJuIG9iajt2YXIgcGFpcnM9W107Zm9yKHZhciBrZXkgaW4gb2JqKXB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLGtleSxvYmpba2V5XSk7cmV0dXJuIHBhaXJzLmpvaW4oIiYiKX1mdW5jdGlvbiBwdXNoRW5jb2RlZEtleVZhbHVlUGFpcihwYWlycyxrZXksdmFsKXtpZihudWxsIT12YWwpaWYoQXJyYXkuaXNBcnJheSh2YWwpKXZhbC5mb3JFYWNoKGZ1bmN0aW9uKHYpe3B1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLGtleSx2KX0pO2Vsc2UgaWYoaXNPYmplY3RfMSh2YWwpKWZvcih2YXIgc3Via2V5IGluIHZhbClwdXNoRW5jb2RlZEtleVZhbHVlUGFpcihwYWlycyxrZXkrIlsiK3N1YmtleSsiXSIsdmFsW3N1YmtleV0pO2Vsc2UgcGFpcnMucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpO2Vsc2UgbnVsbD09PXZhbCYmcGFpcnMucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSl9ZnVuY3Rpb24gcGFyc2VTdHJpbmcoc3RyKXtmb3IodmFyIHBhaXIscG9zLG9iaj17fSxwYWlycz1zdHIuc3BsaXQoIiYiKSxpPTAsbGVuPXBhaXJzLmxlbmd0aDtpPGxlbjsrK2kpLTE9PShwb3M9KHBhaXI9cGFpcnNbaV0pLmluZGV4T2YoIj0iKSk/b2JqW2RlY29kZVVSSUNvbXBvbmVudChwYWlyKV09IiI6b2JqW2RlY29kZVVSSUNvbXBvbmVudChwYWlyLnNsaWNlKDAscG9zKSldPWRlY29kZVVSSUNvbXBvbmVudChwYWlyLnNsaWNlKHBvcysxKSk7cmV0dXJuIG9ian1mdW5jdGlvbiBpc0pTT04obWltZSl7cmV0dXJuL1tcLytdanNvbigkfFteLVx3XSkvLnRlc3QobWltZSl9ZnVuY3Rpb24gUmVzcG9uc2UocmVxKXt0aGlzLnJlcT1yZXEsdGhpcy54aHI9dGhpcy5yZXEueGhyLHRoaXMudGV4dD0iSEVBRCIhPXRoaXMucmVxLm1ldGhvZCYmKCIiPT09dGhpcy54aHIucmVzcG9uc2VUeXBlfHwidGV4dCI9PT10aGlzLnhoci5yZXNwb25zZVR5cGUpfHx2b2lkIDA9PT10aGlzLnhoci5yZXNwb25zZVR5cGU/dGhpcy54aHIucmVzcG9uc2VUZXh0Om51bGwsdGhpcy5zdGF0dXNUZXh0PXRoaXMucmVxLnhoci5zdGF0dXNUZXh0O3ZhciBzdGF0dXM9dGhpcy54aHIuc3RhdHVzOzEyMjM9PT1zdGF0dXMmJihzdGF0dXM9MjA0KSx0aGlzLl9zZXRTdGF0dXNQcm9wZXJ0aWVzKHN0YXR1cyksdGhpcy5oZWFkZXI9dGhpcy5oZWFkZXJzPWZ1bmN0aW9uKHN0cil7Zm9yKHZhciBpbmRleCxsaW5lLGZpZWxkLHZhbCxsaW5lcz1zdHIuc3BsaXQoL1xyP1xuLyksZmllbGRzPXt9LGk9MCxsZW49bGluZXMubGVuZ3RoO2k8bGVuOysraSktMSE9PShpbmRleD0obGluZT1saW5lc1tpXSkuaW5kZXhPZigiOiIpKSYmKGZpZWxkPWxpbmUuc2xpY2UoMCxpbmRleCkudG9Mb3dlckNhc2UoKSx2YWw9dHJpbShsaW5lLnNsaWNlKGluZGV4KzEpKSxmaWVsZHNbZmllbGRdPXZhbCk7cmV0dXJuIGZpZWxkc30odGhpcy54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHRoaXMuaGVhZGVyWyJjb250ZW50LXR5cGUiXT10aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIiksdGhpcy5fc2V0SGVhZGVyUHJvcGVydGllcyh0aGlzLmhlYWRlciksbnVsbD09PXRoaXMudGV4dCYmcmVxLl9yZXNwb25zZVR5cGU/dGhpcy5ib2R5PXRoaXMueGhyLnJlc3BvbnNlOnRoaXMuYm9keT0iSEVBRCIhPXRoaXMucmVxLm1ldGhvZD90aGlzLl9wYXJzZUJvZHkodGhpcy50ZXh0P3RoaXMudGV4dDp0aGlzLnhoci5yZXNwb25zZSk6bnVsbH1mdW5jdGlvbiBSZXF1ZXN0KG1ldGhvZCx1cmwpe3ZhciBzZWxmPXRoaXM7dGhpcy5fcXVlcnk9dGhpcy5fcXVlcnl8fFtdLHRoaXMubWV0aG9kPW1ldGhvZCx0aGlzLnVybD11cmwsdGhpcy5oZWFkZXI9e30sdGhpcy5faGVhZGVyPXt9LHRoaXMub24oImVuZCIsZnVuY3Rpb24oKXt2YXIgbmV3X2VycixlcnI9bnVsbCxyZXM9bnVsbDt0cnl7cmVzPW5ldyBSZXNwb25zZShzZWxmKX1jYXRjaChlKXtyZXR1cm4oZXJyPW5ldyBFcnJvcigiUGFyc2VyIGlzIHVuYWJsZSB0byBwYXJzZSB0aGUgcmVzcG9uc2UiKSkucGFyc2U9ITAsZXJyLm9yaWdpbmFsPWUsc2VsZi54aHI/KGVyci5yYXdSZXNwb25zZT12b2lkIDA9PT1zZWxmLnhoci5yZXNwb25zZVR5cGU/c2VsZi54aHIucmVzcG9uc2VUZXh0OnNlbGYueGhyLnJlc3BvbnNlLGVyci5zdGF0dXM9c2VsZi54aHIuc3RhdHVzP3NlbGYueGhyLnN0YXR1czpudWxsLGVyci5zdGF0dXNDb2RlPWVyci5zdGF0dXMpOihlcnIucmF3UmVzcG9uc2U9bnVsbCxlcnIuc3RhdHVzPW51bGwpLHNlbGYuY2FsbGJhY2soZXJyKX1zZWxmLmVtaXQoInJlc3BvbnNlIixyZXMpO3RyeXtzZWxmLl9pc1Jlc3BvbnNlT0socmVzKXx8KG5ld19lcnI9bmV3IEVycm9yKHJlcy5zdGF0dXNUZXh0fHwiVW5zdWNjZXNzZnVsIEhUVFAgcmVzcG9uc2UiKSl9Y2F0Y2goY3VzdG9tX2Vycil7bmV3X2Vycj1jdXN0b21fZXJyfW5ld19lcnI/KG5ld19lcnIub3JpZ2luYWw9ZXJyLG5ld19lcnIucmVzcG9uc2U9cmVzLG5ld19lcnIuc3RhdHVzPXJlcy5zdGF0dXMsc2VsZi5jYWxsYmFjayhuZXdfZXJyLHJlcykpOnNlbGYuY2FsbGJhY2sobnVsbCxyZXMpfSl9ZnVuY3Rpb24gZGVsKHVybCxkYXRhLGZuKXt2YXIgcmVxPXJlcXVlc3QoIkRFTEVURSIsdXJsKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZGF0YSYmKGZuPWRhdGEsZGF0YT1udWxsKSxkYXRhJiZyZXEuc2VuZChkYXRhKSxmbiYmcmVxLmVuZChmbikscmVxfXJlcXVlc3Quc2VyaWFsaXplT2JqZWN0PXNlcmlhbGl6ZSxyZXF1ZXN0LnBhcnNlU3RyaW5nPXBhcnNlU3RyaW5nLHJlcXVlc3QudHlwZXM9e2h0bWw6InRleHQvaHRtbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiIseG1sOiJ0ZXh0L3htbCIsdXJsZW5jb2RlZDoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixmb3JtOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCJmb3JtLWRhdGEiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifSxyZXF1ZXN0LnNlcmlhbGl6ZT17ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6c2VyaWFsaXplLCJhcHBsaWNhdGlvbi9qc29uIjpKU09OLnN0cmluZ2lmeX0scmVxdWVzdC5wYXJzZT17ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6cGFyc2VTdHJpbmcsImFwcGxpY2F0aW9uL2pzb24iOkpTT04ucGFyc2V9LHJlc3BvbnNlQmFzZShSZXNwb25zZS5wcm90b3R5cGUpLFJlc3BvbnNlLnByb3RvdHlwZS5fcGFyc2VCb2R5PWZ1bmN0aW9uKHN0cil7dmFyIHBhcnNlPXJlcXVlc3QucGFyc2VbdGhpcy50eXBlXTtyZXR1cm4gdGhpcy5yZXEuX3BhcnNlcj90aGlzLnJlcS5fcGFyc2VyKHRoaXMsc3RyKTooIXBhcnNlJiZpc0pTT04odGhpcy50eXBlKSYmKHBhcnNlPXJlcXVlc3QucGFyc2VbImFwcGxpY2F0aW9uL2pzb24iXSkscGFyc2UmJnN0ciYmKHN0ci5sZW5ndGh8fHN0ciBpbnN0YW5jZW9mIE9iamVjdCk/cGFyc2Uoc3RyKTpudWxsKX0sUmVzcG9uc2UucHJvdG90eXBlLnRvRXJyb3I9ZnVuY3Rpb24oKXt2YXIgcmVxPXRoaXMucmVxLG1ldGhvZD1yZXEubWV0aG9kLHVybD1yZXEudXJsLG1zZz0iY2Fubm90ICIrbWV0aG9kKyIgIit1cmwrIiAoIit0aGlzLnN0YXR1cysiKSIsZXJyPW5ldyBFcnJvcihtc2cpO3JldHVybiBlcnIuc3RhdHVzPXRoaXMuc3RhdHVzLGVyci5tZXRob2Q9bWV0aG9kLGVyci51cmw9dXJsLGVycn0scmVxdWVzdC5SZXNwb25zZT1SZXNwb25zZSxjb21wb25lbnRFbWl0dGVyKFJlcXVlc3QucHJvdG90eXBlKSxyZXF1ZXN0QmFzZShSZXF1ZXN0LnByb3RvdHlwZSksUmVxdWVzdC5wcm90b3R5cGUudHlwZT1mdW5jdGlvbih0eXBlKXtyZXR1cm4gdGhpcy5zZXQoIkNvbnRlbnQtVHlwZSIscmVxdWVzdC50eXBlc1t0eXBlXXx8dHlwZSksdGhpc30sUmVxdWVzdC5wcm90b3R5cGUuYWNjZXB0PWZ1bmN0aW9uKHR5cGUpe3JldHVybiB0aGlzLnNldCgiQWNjZXB0IixyZXF1ZXN0LnR5cGVzW3R5cGVdfHx0eXBlKSx0aGlzfSxSZXF1ZXN0LnByb3RvdHlwZS5hdXRoPWZ1bmN0aW9uKHVzZXIscGFzcyxvcHRpb25zKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKHBhc3M9IiIpLCJvYmplY3QiPT10eXBlb2YgcGFzcyYmbnVsbCE9PXBhc3MmJihvcHRpb25zPXBhc3MscGFzcz0iIiksb3B0aW9uc3x8KG9wdGlvbnM9e3R5cGU6ImZ1bmN0aW9uIj09dHlwZW9mIGJ0b2E/ImJhc2ljIjoiYXV0byJ9KTt2YXIgZW5jb2Rlcj1mdW5jdGlvbihzdHJpbmcpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBidG9hKXJldHVybiBidG9hKHN0cmluZyk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXNlIGJhc2ljIGF1dGgsIGJ0b2EgaXMgbm90IGEgZnVuY3Rpb24iKX07cmV0dXJuIHRoaXMuX2F1dGgodXNlcixwYXNzLG9wdGlvbnMsZW5jb2Rlcil9LFJlcXVlc3QucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHZhbCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB2YWwmJih2YWw9c2VyaWFsaXplKHZhbCkpLHZhbCYmdGhpcy5fcXVlcnkucHVzaCh2YWwpLHRoaXN9LFJlcXVlc3QucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbihmaWVsZCxmaWxlLG9wdGlvbnMpe2lmKGZpbGUpe2lmKHRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoInN1cGVyYWdlbnQgY2FuJ3QgbWl4IC5zZW5kKCkgYW5kIC5hdHRhY2goKSIpO3RoaXMuX2dldEZvcm1EYXRhKCkuYXBwZW5kKGZpZWxkLGZpbGUsb3B0aW9uc3x8ZmlsZS5uYW1lKX1yZXR1cm4gdGhpc30sUmVxdWVzdC5wcm90b3R5cGUuX2dldEZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1EYXRhfHwodGhpcy5fZm9ybURhdGE9bmV3IHJvb3QuRm9ybURhdGEpLHRoaXMuX2Zvcm1EYXRhfSxSZXF1ZXN0LnByb3RvdHlwZS5jYWxsYmFjaz1mdW5jdGlvbihlcnIscmVzKXtpZih0aGlzLl9zaG91bGRSZXRyeShlcnIscmVzKSlyZXR1cm4gdGhpcy5fcmV0cnkoKTt2YXIgZm49dGhpcy5fY2FsbGJhY2s7dGhpcy5jbGVhclRpbWVvdXQoKSxlcnImJih0aGlzLl9tYXhSZXRyaWVzJiYoZXJyLnJldHJpZXM9dGhpcy5fcmV0cmllcy0xKSx0aGlzLmVtaXQoImVycm9yIixlcnIpKSxmbihlcnIscmVzKX0sUmVxdWVzdC5wcm90b3R5cGUuY3Jvc3NEb21haW5FcnJvcj1mdW5jdGlvbigpe3ZhciBlcnI9bmV3IEVycm9yKCJSZXF1ZXN0IGhhcyBiZWVuIHRlcm1pbmF0ZWRcblBvc3NpYmxlIGNhdXNlczogdGhlIG5ldHdvcmsgaXMgb2ZmbGluZSwgT3JpZ2luIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiwgdGhlIHBhZ2UgaXMgYmVpbmcgdW5sb2FkZWQsIGV0Yy4iKTtlcnIuY3Jvc3NEb21haW49ITAsZXJyLnN0YXR1cz10aGlzLnN0YXR1cyxlcnIubWV0aG9kPXRoaXMubWV0aG9kLGVyci51cmw9dGhpcy51cmwsdGhpcy5jYWxsYmFjayhlcnIpfSxSZXF1ZXN0LnByb3RvdHlwZS5idWZmZXI9UmVxdWVzdC5wcm90b3R5cGUuY2E9UmVxdWVzdC5wcm90b3R5cGUuYWdlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciB2ZXJzaW9uIG9mIHN1cGVyYWdlbnQiKSx0aGlzfSxSZXF1ZXN0LnByb3RvdHlwZS5waXBlPVJlcXVlc3QucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlN0cmVhbWluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgdmVyc2lvbiBvZiBzdXBlcmFnZW50Iil9LFJlcXVlc3QucHJvdG90eXBlLl9pc0hvc3Q9ZnVuY3Rpb24ob2JqKXtyZXR1cm4gb2JqJiYib2JqZWN0Ij09dHlwZW9mIG9iaiYmIUFycmF5LmlzQXJyYXkob2JqKSYmIltvYmplY3QgT2JqZWN0XSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKX0sUmVxdWVzdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGZuKXtyZXR1cm4gdGhpcy5fZW5kQ2FsbGVkJiZjb25zb2xlLndhcm4oIldhcm5pbmc6IC5lbmQoKSB3YXMgY2FsbGVkIHR3aWNlLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gc3VwZXJhZ2VudCIpLHRoaXMuX2VuZENhbGxlZD0hMCx0aGlzLl9jYWxsYmFjaz1mbnx8bm9vcCx0aGlzLl9maW5hbGl6ZVF1ZXJ5U3RyaW5nKCksdGhpcy5fZW5kKCl9LFJlcXVlc3QucHJvdG90eXBlLl9lbmQ9ZnVuY3Rpb24oKXt2YXIgc2VsZj10aGlzLHhocj10aGlzLnhocj1yZXF1ZXN0LmdldFhIUigpLGRhdGE9dGhpcy5fZm9ybURhdGF8fHRoaXMuX2RhdGE7dGhpcy5fc2V0VGltZW91dHMoKSx4aHIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7dmFyIHJlYWR5U3RhdGU9eGhyLnJlYWR5U3RhdGU7aWYocmVhZHlTdGF0ZT49MiYmc2VsZi5fcmVzcG9uc2VUaW1lb3V0VGltZXImJmNsZWFyVGltZW91dChzZWxmLl9yZXNwb25zZVRpbWVvdXRUaW1lciksND09cmVhZHlTdGF0ZSl7dmFyIHN0YXR1czt0cnl7c3RhdHVzPXhoci5zdGF0dXN9Y2F0Y2goZSl7c3RhdHVzPTB9aWYoIXN0YXR1cyl7aWYoc2VsZi50aW1lZG91dHx8c2VsZi5fYWJvcnRlZClyZXR1cm47cmV0dXJuIHNlbGYuY3Jvc3NEb21haW5FcnJvcigpfXNlbGYuZW1pdCgiZW5kIil9fTt2YXIgaGFuZGxlUHJvZ3Jlc3M9ZnVuY3Rpb24oZGlyZWN0aW9uLGUpe2UudG90YWw+MCYmKGUucGVyY2VudD1lLmxvYWRlZC9lLnRvdGFsKjEwMCksZS5kaXJlY3Rpb249ZGlyZWN0aW9uLHNlbGYuZW1pdCgicHJvZ3Jlc3MiLGUpfTtpZih0aGlzLmhhc0xpc3RlbmVycygicHJvZ3Jlc3MiKSl0cnl7eGhyLm9ucHJvZ3Jlc3M9aGFuZGxlUHJvZ3Jlc3MuYmluZChudWxsLCJkb3dubG9hZCIpLHhoci51cGxvYWQmJih4aHIudXBsb2FkLm9ucHJvZ3Jlc3M9aGFuZGxlUHJvZ3Jlc3MuYmluZChudWxsLCJ1cGxvYWQiKSl9Y2F0Y2goZSl7fXRyeXt0aGlzLnVzZXJuYW1lJiZ0aGlzLnBhc3N3b3JkP3hoci5vcGVuKHRoaXMubWV0aG9kLHRoaXMudXJsLCEwLHRoaXMudXNlcm5hbWUsdGhpcy5wYXNzd29yZCk6eGhyLm9wZW4odGhpcy5tZXRob2QsdGhpcy51cmwsITApfWNhdGNoKGVycil7cmV0dXJuIHRoaXMuY2FsbGJhY2soZXJyKX1pZih0aGlzLl93aXRoQ3JlZGVudGlhbHMmJih4aHIud2l0aENyZWRlbnRpYWxzPSEwKSwhdGhpcy5fZm9ybURhdGEmJiJHRVQiIT10aGlzLm1ldGhvZCYmIkhFQUQiIT10aGlzLm1ldGhvZCYmInN0cmluZyIhPXR5cGVvZiBkYXRhJiYhdGhpcy5faXNIb3N0KGRhdGEpKXt2YXIgY29udGVudFR5cGU9dGhpcy5faGVhZGVyWyJjb250ZW50LXR5cGUiXSxzZXJpYWxpemU9dGhpcy5fc2VyaWFsaXplcnx8cmVxdWVzdC5zZXJpYWxpemVbY29udGVudFR5cGU/Y29udGVudFR5cGUuc3BsaXQoIjsiKVswXToiIl07IXNlcmlhbGl6ZSYmaXNKU09OKGNvbnRlbnRUeXBlKSYmKHNlcmlhbGl6ZT1yZXF1ZXN0LnNlcmlhbGl6ZVsiYXBwbGljYXRpb24vanNvbiJdKSxzZXJpYWxpemUmJihkYXRhPXNlcmlhbGl6ZShkYXRhKSl9Zm9yKHZhciBmaWVsZCBpbiB0aGlzLmhlYWRlciludWxsIT10aGlzLmhlYWRlcltmaWVsZF0mJnRoaXMuaGVhZGVyLmhhc093blByb3BlcnR5KGZpZWxkKSYmeGhyLnNldFJlcXVlc3RIZWFkZXIoZmllbGQsdGhpcy5oZWFkZXJbZmllbGRdKTtyZXR1cm4gdGhpcy5fcmVzcG9uc2VUeXBlJiYoeGhyLnJlc3BvbnNlVHlwZT10aGlzLl9yZXNwb25zZVR5cGUpLHRoaXMuZW1pdCgicmVxdWVzdCIsdGhpcykseGhyLnNlbmQodm9pZCAwIT09ZGF0YT9kYXRhOm51bGwpLHRoaXN9LHJlcXVlc3QuYWdlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFnZW50QmFzZX0sWyJHRVQiLCJQT1NUIiwiT1BUSU9OUyIsIlBBVENIIiwiUFVUIiwiREVMRVRFIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2Qpe2FnZW50QmFzZS5wcm90b3R5cGVbbWV0aG9kLnRvTG93ZXJDYXNlKCldPWZ1bmN0aW9uKHVybCxmbil7dmFyIHJlcT1uZXcgcmVxdWVzdC5SZXF1ZXN0KG1ldGhvZCx1cmwpO3JldHVybiB0aGlzLl9zZXREZWZhdWx0cyhyZXEpLGZuJiZyZXEuZW5kKGZuKSxyZXF9fSksYWdlbnRCYXNlLnByb3RvdHlwZS5kZWw9YWdlbnRCYXNlLnByb3RvdHlwZS5kZWxldGUscmVxdWVzdC5nZXQ9ZnVuY3Rpb24odXJsLGRhdGEsZm4pe3ZhciByZXE9cmVxdWVzdCgiR0VUIix1cmwpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkYXRhJiYoZm49ZGF0YSxkYXRhPW51bGwpLGRhdGEmJnJlcS5xdWVyeShkYXRhKSxmbiYmcmVxLmVuZChmbikscmVxfSxyZXF1ZXN0LmhlYWQ9ZnVuY3Rpb24odXJsLGRhdGEsZm4pe3ZhciByZXE9cmVxdWVzdCgiSEVBRCIsdXJsKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZGF0YSYmKGZuPWRhdGEsZGF0YT1udWxsKSxkYXRhJiZyZXEucXVlcnkoZGF0YSksZm4mJnJlcS5lbmQoZm4pLHJlcX0scmVxdWVzdC5vcHRpb25zPWZ1bmN0aW9uKHVybCxkYXRhLGZuKXt2YXIgcmVxPXJlcXVlc3QoIk9QVElPTlMiLHVybCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGRhdGEmJihmbj1kYXRhLGRhdGE9bnVsbCksZGF0YSYmcmVxLnNlbmQoZGF0YSksZm4mJnJlcS5lbmQoZm4pLHJlcX0scmVxdWVzdC5kZWw9ZGVsLHJlcXVlc3QuZGVsZXRlPWRlbCxyZXF1ZXN0LnBhdGNoPWZ1bmN0aW9uKHVybCxkYXRhLGZuKXt2YXIgcmVxPXJlcXVlc3QoIlBBVENIIix1cmwpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkYXRhJiYoZm49ZGF0YSxkYXRhPW51bGwpLGRhdGEmJnJlcS5zZW5kKGRhdGEpLGZuJiZyZXEuZW5kKGZuKSxyZXF9LHJlcXVlc3QucG9zdD1mdW5jdGlvbih1cmwsZGF0YSxmbil7dmFyIHJlcT1yZXF1ZXN0KCJQT1NUIix1cmwpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkYXRhJiYoZm49ZGF0YSxkYXRhPW51bGwpLGRhdGEmJnJlcS5zZW5kKGRhdGEpLGZuJiZyZXEuZW5kKGZuKSxyZXF9LHJlcXVlc3QucHV0PWZ1bmN0aW9uKHVybCxkYXRhLGZuKXt2YXIgcmVxPXJlcXVlc3QoIlBVVCIsdXJsKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZGF0YSYmKGZuPWRhdGEsZGF0YT1udWxsKSxkYXRhJiZyZXEuc2VuZChkYXRhKSxmbiYmcmVxLmVuZChmbikscmVxfX0pLGJ5dGVMZW5ndGhfMT0oY2xpZW50LlJlcXVlc3QsZnVuY3Rpb24oYjY0KXt2YXIgbGVucz1nZXRMZW5zKGI2NCksdmFsaWRMZW49bGVuc1swXSxwbGFjZUhvbGRlcnNMZW49bGVuc1sxXTtyZXR1cm4gMyoodmFsaWRMZW4rcGxhY2VIb2xkZXJzTGVuKS80LXBsYWNlSG9sZGVyc0xlbn0pLHRvQnl0ZUFycmF5XzE9ZnVuY3Rpb24oYjY0KXtmb3IodmFyIHRtcCxsZW5zPWdldExlbnMoYjY0KSx2YWxpZExlbj1sZW5zWzBdLHBsYWNlSG9sZGVyc0xlbj1sZW5zWzFdLGFycj1uZXcgQXJyKGZ1bmN0aW9uKGI2NCx2YWxpZExlbixwbGFjZUhvbGRlcnNMZW4pe3JldHVybiAzKih2YWxpZExlbitwbGFjZUhvbGRlcnNMZW4pLzQtcGxhY2VIb2xkZXJzTGVufSgwLHZhbGlkTGVuLHBsYWNlSG9sZGVyc0xlbikpLGN1ckJ5dGU9MCxsZW49cGxhY2VIb2xkZXJzTGVuPjA/dmFsaWRMZW4tNDp2YWxpZExlbixpPTA7aTxsZW47aSs9NCl0bXA9cmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXTw8MTh8cmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkrMSldPDwxMnxyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSsyKV08PDZ8cmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkrMyldLGFycltjdXJCeXRlKytdPXRtcD4+MTYmMjU1LGFycltjdXJCeXRlKytdPXRtcD4+OCYyNTUsYXJyW2N1ckJ5dGUrK109MjU1JnRtcDsyPT09cGxhY2VIb2xkZXJzTGVuJiYodG1wPXJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV08PDJ8cmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkrMSldPj40LGFycltjdXJCeXRlKytdPTI1NSZ0bXApOzE9PT1wbGFjZUhvbGRlcnNMZW4mJih0bXA9cmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXTw8MTB8cmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkrMSldPDw0fHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKzIpXT4+MixhcnJbY3VyQnl0ZSsrXT10bXA+PjgmMjU1LGFycltjdXJCeXRlKytdPTI1NSZ0bXApO3JldHVybiBhcnJ9LGZyb21CeXRlQXJyYXlfMT1mdW5jdGlvbih1aW50OCl7Zm9yKHZhciB0bXAsbGVuPXVpbnQ4Lmxlbmd0aCxleHRyYUJ5dGVzPWxlbiUzLHBhcnRzPVtdLGk9MCxsZW4yPWxlbi1leHRyYUJ5dGVzO2k8bGVuMjtpKz0xNjM4MylwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LGksaSsxNjM4Mz5sZW4yP2xlbjI6aSsxNjM4MykpOzE9PT1leHRyYUJ5dGVzPyh0bXA9dWludDhbbGVuLTFdLHBhcnRzLnB1c2gobG9va3VwW3RtcD4+Ml0rbG9va3VwW3RtcDw8NCY2M10rIj09IikpOjI9PT1leHRyYUJ5dGVzJiYodG1wPSh1aW50OFtsZW4tMl08PDgpK3VpbnQ4W2xlbi0xXSxwYXJ0cy5wdXNoKGxvb2t1cFt0bXA+PjEwXStsb29rdXBbdG1wPj40JjYzXStsb29rdXBbdG1wPDwyJjYzXSsiPSIpKTtyZXR1cm4gcGFydHMuam9pbigiIil9LGxvb2t1cD1bXSxyZXZMb29rdXA9W10sQXJyPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGNvZGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGk9MCxsZW49Y29kZS5sZW5ndGg7aTxsZW47KytpKWxvb2t1cFtpXT1jb2RlW2ldLHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldPWk7ZnVuY3Rpb24gZ2V0TGVucyhiNjQpe3ZhciBsZW49YjY0Lmxlbmd0aDtpZihsZW4lND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciB2YWxpZExlbj1iNjQuaW5kZXhPZigiPSIpO3JldHVybi0xPT09dmFsaWRMZW4mJih2YWxpZExlbj1sZW4pLFt2YWxpZExlbix2YWxpZExlbj09PWxlbj8wOjQtdmFsaWRMZW4lNF19ZnVuY3Rpb24gZW5jb2RlQ2h1bmsodWludDgsc3RhcnQsZW5kKXtmb3IodmFyIHRtcCxudW0sb3V0cHV0PVtdLGk9c3RhcnQ7aTxlbmQ7aSs9Myl0bXA9KHVpbnQ4W2ldPDwxNiYxNjcxMTY4MCkrKHVpbnQ4W2krMV08PDgmNjUyODApKygyNTUmdWludDhbaSsyXSksb3V0cHV0LnB1c2gobG9va3VwWyhudW09dG1wKT4+MTgmNjNdK2xvb2t1cFtudW0+PjEyJjYzXStsb29rdXBbbnVtPj42JjYzXStsb29rdXBbNjMmbnVtXSk7cmV0dXJuIG91dHB1dC5qb2luKCIiKX1yZXZMb29rdXBbIi0iLmNoYXJDb2RlQXQoMCldPTYyLHJldkxvb2t1cFsiXyIuY2hhckNvZGVBdCgwKV09NjM7dmFyIGJhc2U2NEpzPXtieXRlTGVuZ3RoOmJ5dGVMZW5ndGhfMSx0b0J5dGVBcnJheTp0b0J5dGVBcnJheV8xLGZyb21CeXRlQXJyYXk6ZnJvbUJ5dGVBcnJheV8xfTt2YXIgYmFzZTY0VXJsPXtlbmNvZGU6ZnVuY3Rpb24oc3RyKXtyZXR1cm4gYmFzZTY0SnMuZnJvbUJ5dGVBcnJheShmdW5jdGlvbihzdHIpe2Zvcih2YXIgYXJyPW5ldyBBcnJheShzdHIubGVuZ3RoKSxhPTA7YTxzdHIubGVuZ3RoO2ErKylhcnJbYV09c3RyLmNoYXJDb2RlQXQoYSk7cmV0dXJuIGFycn0oc3RyKSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX0sZGVjb2RlOmZ1bmN0aW9uKHN0cil7cmV0dXJuIHN0cj1mdW5jdGlvbihzdHIpe3ZhciBtb2Q9c3RyLmxlbmd0aCU0O3JldHVybiAwPT09bW9kP3N0cjpzdHIrbmV3IEFycmF5KDQtbW9kKzEpLmpvaW4oIj0iKX0oc3RyKS5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKSxmdW5jdGlvbihhcnJheSl7Zm9yKHZhciByZXN1bHQ9IiIsaT0wO2k8YXJyYXkubGVuZ3RoO2krKylyZXN1bHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYXJyYXlbaV0pO3JldHVybiByZXN1bHR9KGJhc2U2NEpzLnRvQnl0ZUFycmF5KHN0cikpfX0sdmVyc2lvbj17cmF3OiI5LjExLjMifSx0b1N0cmluZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGF0dHJpYnV0ZShvLGF0dHIsdHlwZSx0ZXh0KXtpZih0eXBlPSJhcnJheSI9PT10eXBlPyJvYmplY3QiOnR5cGUsbyYmdHlwZW9mIG9bYXR0cl0hPT10eXBlKXRocm93IG5ldyBFcnJvcih0ZXh0KX1mdW5jdGlvbiB2YXJpYWJsZShvLHR5cGUsdGV4dCl7aWYodHlwZW9mIG8hPT10eXBlKXRocm93IG5ldyBFcnJvcih0ZXh0KX1mdW5jdGlvbiB2YWx1ZShvLHZhbHVlcyx0ZXh0KXtpZigtMT09PXZhbHVlcy5pbmRleE9mKG8pKXRocm93IG5ldyBFcnJvcih0ZXh0KX12YXIgYXNzZXJ0PXtjaGVjazpmdW5jdGlvbihvLGNvbmZpZyxhdHRyaWJ1dGVzKXtpZihjb25maWcub3B0aW9uYWwmJiFvfHx2YXJpYWJsZShvLGNvbmZpZy50eXBlLGNvbmZpZy5tZXNzYWdlKSwib2JqZWN0Ij09PWNvbmZpZy50eXBlJiZhdHRyaWJ1dGVzKWZvcih2YXIga2V5cz1PYmplY3Qua2V5cyhhdHRyaWJ1dGVzKSxpbmRleD0wO2luZGV4PGtleXMubGVuZ3RoO2luZGV4Kyspe3ZhciBhPWtleXNbaW5kZXhdO2F0dHJpYnV0ZXNbYV0ub3B0aW9uYWwmJiFvW2FdfHxhdHRyaWJ1dGVzW2FdLmNvbmRpdGlvbiYmIWF0dHJpYnV0ZXNbYV0uY29uZGl0aW9uKG8pfHwoYXR0cmlidXRlKG8sYSxhdHRyaWJ1dGVzW2FdLnR5cGUsYXR0cmlidXRlc1thXS5tZXNzYWdlKSxhdHRyaWJ1dGVzW2FdLnZhbHVlcyYmdmFsdWUob1thXSxhdHRyaWJ1dGVzW2FdLnZhbHVlcyxhdHRyaWJ1dGVzW2FdLnZhbHVlX21lc3NhZ2UpKX19LGF0dHJpYnV0ZTphdHRyaWJ1dGUsdmFyaWFibGU6dmFyaWFibGUsdmFsdWU6dmFsdWUsaXNBcnJheTpmdW5jdGlvbihhcnJheSl7cmV0dXJuIHRoaXMuc3VwcG9ydHNJc0FycmF5KCk/QXJyYXkuaXNBcnJheShhcnJheSk6IltvYmplY3QgQXJyYXldIj09PXRvU3RyaW5nLmNhbGwoYXJyYXkpfSxzdXBwb3J0c0lzQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9QXJyYXkuaXNBcnJheX19O2Z1bmN0aW9uIG9iamVjdEFzc2lnblBvbHlmaWxsKHRhcmdldCl7aWYobnVsbD09dGFyZ2V0KXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGZpcnN0IGFyZ3VtZW50IHRvIG9iamVjdCIpO2Zvcih2YXIgdG89T2JqZWN0KHRhcmdldCksaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBuZXh0U291cmNlPWFyZ3VtZW50c1tpXTtpZihudWxsIT1uZXh0U291cmNlKWZvcih2YXIga2V5c0FycmF5PU9iamVjdC5rZXlzKE9iamVjdChuZXh0U291cmNlKSksbmV4dEluZGV4PTAsbGVuPWtleXNBcnJheS5sZW5ndGg7bmV4dEluZGV4PGxlbjtuZXh0SW5kZXgrKyl7dmFyIG5leHRLZXk9a2V5c0FycmF5W25leHRJbmRleF0sZGVzYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5leHRTb3VyY2UsbmV4dEtleSk7dm9pZCAwIT09ZGVzYyYmZGVzYy5lbnVtZXJhYmxlJiYodG9bbmV4dEtleV09bmV4dFNvdXJjZVtuZXh0S2V5XSl9fXJldHVybiB0b312YXIgb2JqZWN0QXNzaWduPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduOm9iamVjdEFzc2lnblBvbHlmaWxsfSxvYmplY3RBc3NpZ25Qb2x5ZmlsbDpvYmplY3RBc3NpZ25Qb2x5ZmlsbH07ZnVuY3Rpb24gcGljayhvYmplY3Qsa2V5cyl7cmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uKHByZXYsa2V5KXtyZXR1cm4gb2JqZWN0W2tleV0mJihwcmV2W2tleV09b2JqZWN0W2tleV0pLHByZXZ9LHt9KX1mdW5jdGlvbiBleHRlbmQoKXt2YXIgcGFyYW1zPWZ1bmN0aW9uKG9iail7dmFyIHZhbHVlcz1bXTtmb3IodmFyIGtleSBpbiBvYmopdmFsdWVzLnB1c2gob2JqW2tleV0pO3JldHVybiB2YWx1ZXN9KGFyZ3VtZW50cyk7cmV0dXJuIHBhcmFtcy51bnNoaWZ0KHt9KSxvYmplY3RBc3NpZ24uZ2V0KCkuYXBwbHkodm9pZCAwLHBhcmFtcyl9ZnVuY3Rpb24gZ2V0TG9jYXRpb25Gcm9tVXJsKGhyZWYpe3ZhciBtYXRjaD1ocmVmLm1hdGNoKC9eKGh0dHBzPzp8ZmlsZTopXC9cLygoW146XC8/I10qKSg/OjooWzAtOV0rKSk/KShbXC9dezAsMX1bXj8jXSopKFw/W14jXSp8KSgjLip8KSQvKTtyZXR1cm4gbWF0Y2gmJntocmVmOmhyZWYscHJvdG9jb2w6bWF0Y2hbMV0saG9zdDptYXRjaFsyXSxob3N0bmFtZTptYXRjaFszXSxwb3J0Om1hdGNoWzRdLHBhdGhuYW1lOm1hdGNoWzVdLHNlYXJjaDptYXRjaFs2XSxoYXNoOm1hdGNoWzddfX1mdW5jdGlvbiB0cmltKG9wdGlvbnMsa2V5KXt2YXIgdHJpbW1lZD1leHRlbmQob3B0aW9ucyk7cmV0dXJuIG9wdGlvbnNba2V5XSYmKHRyaW1tZWRba2V5XT1vcHRpb25zW2tleV0udHJpbSgpKSx0cmltbWVkfXZhciBvYmplY3RIZWxwZXI9e3RvU25ha2VDYXNlOmZ1bmN0aW9uIHRvU25ha2VDYXNlKG9iamVjdCxleGNlcHRpb25zKXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIG9iamVjdHx8YXNzZXJ0LmlzQXJyYXkob2JqZWN0KXx8bnVsbD09PW9iamVjdD9vYmplY3Q6KGV4Y2VwdGlvbnM9ZXhjZXB0aW9uc3x8W10sT2JqZWN0LmtleXMob2JqZWN0KS5yZWR1Y2UoZnVuY3Rpb24ocCxrZXkpe3JldHVybiBwWy0xPT09ZXhjZXB0aW9ucy5pbmRleE9mKGtleSk/ZnVuY3Rpb24oc3RyKXtmb3IodmFyIGNvZGUsbmV3S2V5PSIiLGluZGV4PTAsd2FzUHJldk51bWJlcj0hMCx3YXNQcmV2VXBwZXJjYXNlPSEwO2luZGV4PHN0ci5sZW5ndGg7KWNvZGU9c3RyLmNoYXJDb2RlQXQoaW5kZXgpLCF3YXNQcmV2VXBwZXJjYXNlJiZjb2RlPj02NSYmY29kZTw9OTB8fCF3YXNQcmV2TnVtYmVyJiZjb2RlPj00OCYmY29kZTw9NTc/KG5ld0tleSs9Il8iLG5ld0tleSs9c3RyW2luZGV4XS50b0xvd2VyQ2FzZSgpKTpuZXdLZXkrPXN0cltpbmRleF0udG9Mb3dlckNhc2UoKSx3YXNQcmV2TnVtYmVyPWNvZGU+PTQ4JiZjb2RlPD01Nyx3YXNQcmV2VXBwZXJjYXNlPWNvZGU+PTY1JiZjb2RlPD05MCxpbmRleCsrO3JldHVybiBuZXdLZXl9KGtleSk6a2V5XT10b1NuYWtlQ2FzZShvYmplY3Rba2V5XSkscH0se30pKX0sdG9DYW1lbENhc2U6ZnVuY3Rpb24gdG9DYW1lbENhc2Uob2JqZWN0LGV4Y2VwdGlvbnMsb3B0aW9ucyl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiBvYmplY3R8fGFzc2VydC5pc0FycmF5KG9iamVjdCl8fG51bGw9PT1vYmplY3Q/b2JqZWN0OihleGNlcHRpb25zPWV4Y2VwdGlvbnN8fFtdLG9wdGlvbnM9b3B0aW9uc3x8e30sT2JqZWN0LmtleXMob2JqZWN0KS5yZWR1Y2UoZnVuY3Rpb24ocCxrZXkpe3ZhciBwYXJ0cyxuZXdLZXk9LTE9PT1leGNlcHRpb25zLmluZGV4T2Yoa2V5KT8ocGFydHM9a2V5LnNwbGl0KCJfIikpLnJlZHVjZShmdW5jdGlvbihwLGMpe3JldHVybiBwK2MuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX0scGFydHMuc2hpZnQoKSk6a2V5O3JldHVybiBwW25ld0tleV09dG9DYW1lbENhc2Uob2JqZWN0W25ld0tleV18fG9iamVjdFtrZXldLFtdLG9wdGlvbnMpLG9wdGlvbnMua2VlcE9yaWdpbmFsJiYocFtrZXldPXRvQ2FtZWxDYXNlKG9iamVjdFtrZXldLFtdLG9wdGlvbnMpKSxwfSx7fSkpfSxibGFja2xpc3Q6ZnVuY3Rpb24ob2JqZWN0LGJsYWNrbGlzdGVkS2V5cyl7cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKGZ1bmN0aW9uKHAsa2V5KXtyZXR1cm4tMT09PWJsYWNrbGlzdGVkS2V5cy5pbmRleE9mKGtleSkmJihwW2tleV09b2JqZWN0W2tleV0pLHB9LHt9KX0sbWVyZ2U6ZnVuY3Rpb24ob2JqZWN0LGtleXMpe3JldHVybntiYXNlOmtleXM/cGljayhvYmplY3Qsa2V5cyk6b2JqZWN0LHdpdGg6ZnVuY3Rpb24ob2JqZWN0MixrZXlzMil7cmV0dXJuIG9iamVjdDI9a2V5czI/cGljayhvYmplY3QyLGtleXMyKTpvYmplY3QyLGV4dGVuZCh0aGlzLmJhc2Usb2JqZWN0Mil9fX0scGljazpwaWNrLGdldEtleXNOb3RJbjpmdW5jdGlvbihvYmosYWxsb3dlZEtleXMpe3ZhciBub3RBbGxvd2VkPVtdO2Zvcih2YXIga2V5IGluIG9iaiktMT09PWFsbG93ZWRLZXlzLmluZGV4T2Yoa2V5KSYmbm90QWxsb3dlZC5wdXNoKGtleSk7cmV0dXJuIG5vdEFsbG93ZWR9LGV4dGVuZDpleHRlbmQsZ2V0T3JpZ2luRnJvbVVybDpmdW5jdGlvbih1cmwpe2lmKHVybCl7dmFyIHBhcnNlZD1nZXRMb2NhdGlvbkZyb21VcmwodXJsKSxvcmlnaW49cGFyc2VkLnByb3RvY29sKyIvLyIrcGFyc2VkLmhvc3RuYW1lO3JldHVybiBwYXJzZWQucG9ydCYmKG9yaWdpbis9IjoiK3BhcnNlZC5wb3J0KSxvcmlnaW59fSxnZXRMb2NhdGlvbkZyb21Vcmw6Z2V0TG9jYXRpb25Gcm9tVXJsLHRyaW1Vc2VyRGV0YWlsczpmdW5jdGlvbihvcHRpb25zKXtyZXR1cm4gZnVuY3Rpb24ob3B0aW9ucyxrZXlzKXtyZXR1cm4ga2V5cy5yZWR1Y2UodHJpbSxvcHRpb25zKX0ob3B0aW9ucyxbInVzZXJuYW1lIiwiZW1haWwiLCJwaG9uZU51bWJlciJdKX19O2Z1bmN0aW9uIFJlcXVlc3RXcmFwcGVyKHJlcSl7dGhpcy5yZXF1ZXN0PXJlcSx0aGlzLm1ldGhvZD1yZXEubWV0aG9kLHRoaXMudXJsPXJlcS51cmwsdGhpcy5ib2R5PXJlcS5fZGF0YSx0aGlzLmhlYWRlcnM9cmVxLl9oZWFkZXJ9ZnVuY3Rpb24gUmVxdWVzdE9iaihyZXEpe3RoaXMucmVxdWVzdD1yZXF9ZnVuY3Rpb24gUmVxdWVzdEJ1aWxkZXIob3B0aW9ucyl7dGhpcy5fc2VuZFRlbGVtZXRyeT0hMSE9PW9wdGlvbnMuX3NlbmRUZWxlbWV0cnl8fG9wdGlvbnMuX3NlbmRUZWxlbWV0cnksdGhpcy5fdGVsZW1ldHJ5SW5mbz1vcHRpb25zLl90ZWxlbWV0cnlJbmZvfHxudWxsLHRoaXMuX3RpbWVzVG9SZXRyeUZhaWxlZFJlcXVlc3RzPW9wdGlvbnMuX3RpbWVzVG9SZXRyeUZhaWxlZFJlcXVlc3RzLHRoaXMuaGVhZGVycz1vcHRpb25zLmhlYWRlcnN8fHt9LHRoaXMuX3VuaXZlcnNhbExvZ2luUGFnZT1vcHRpb25zLnVuaXZlcnNhbExvZ2luUGFnZX1mdW5jdGlvbiBnZXRXaW5kb3coKXtyZXR1cm4gd2luZG93fVJlcXVlc3RXcmFwcGVyLnByb3RvdHlwZS5hYm9ydD1mdW5jdGlvbigpe3RoaXMucmVxdWVzdC5hYm9ydCgpfSxSZXF1ZXN0V3JhcHBlci5wcm90b3R5cGUuZ2V0TWV0aG9kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWV0aG9kfSxSZXF1ZXN0V3JhcHBlci5wcm90b3R5cGUuZ2V0Qm9keT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJvZHl9LFJlcXVlc3RXcmFwcGVyLnByb3RvdHlwZS5nZXRVcmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cmx9LFJlcXVlc3RXcmFwcGVyLnByb3RvdHlwZS5nZXRIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZGVyc30sUmVxdWVzdE9iai5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGtleSx2YWx1ZSl7cmV0dXJuIHRoaXMucmVxdWVzdD10aGlzLnJlcXVlc3Quc2V0KGtleSx2YWx1ZSksdGhpc30sUmVxdWVzdE9iai5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbihib2R5KXtyZXR1cm4gdGhpcy5yZXF1ZXN0PXRoaXMucmVxdWVzdC5zZW5kKG9iamVjdEhlbHBlci50cmltVXNlckRldGFpbHMoYm9keSkpLHRoaXN9LFJlcXVlc3RPYmoucHJvdG90eXBlLndpdGhDcmVkZW50aWFscz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcXVlc3Q9dGhpcy5yZXF1ZXN0LndpdGhDcmVkZW50aWFscygpLHRoaXN9LFJlcXVlc3RPYmoucHJvdG90eXBlLmVuZD1mdW5jdGlvbihjYil7cmV0dXJuIHRoaXMucmVxdWVzdD10aGlzLnJlcXVlc3QuZW5kKGNiKSxuZXcgUmVxdWVzdFdyYXBwZXIodGhpcy5yZXF1ZXN0KX0sUmVxdWVzdEJ1aWxkZXIucHJvdG90eXBlLnNldENvbW1vbkNvbmZpZ3VyYXRpb249ZnVuY3Rpb24ob25nb2luZ1JlcXVlc3Qsb3B0aW9ucyl7aWYob3B0aW9ucz1vcHRpb25zfHx7fSx0aGlzLl90aW1lc1RvUmV0cnlGYWlsZWRSZXF1ZXN0cz4wJiYob25nb2luZ1JlcXVlc3Q9b25nb2luZ1JlcXVlc3QucmV0cnkodGhpcy5fdGltZXNUb1JldHJ5RmFpbGVkUmVxdWVzdHMpKSxvcHRpb25zLm5vSGVhZGVycylyZXR1cm4gb25nb2luZ1JlcXVlc3Q7dmFyIGhlYWRlcnM9dGhpcy5oZWFkZXJzO29uZ29pbmdSZXF1ZXN0PW9uZ29pbmdSZXF1ZXN0LnNldCgiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24vanNvbiIpO2Zvcih2YXIga2V5cz1PYmplY3Qua2V5cyh0aGlzLmhlYWRlcnMpLGE9MDthPGtleXMubGVuZ3RoO2ErKylvbmdvaW5nUmVxdWVzdD1vbmdvaW5nUmVxdWVzdC5zZXQoa2V5c1thXSxoZWFkZXJzW2tleXNbYV1dKTtyZXR1cm4gdGhpcy5fc2VuZFRlbGVtZXRyeSYmKG9uZ29pbmdSZXF1ZXN0PW9uZ29pbmdSZXF1ZXN0LnNldCgiQXV0aDAtQ2xpZW50Iix0aGlzLmdldFRlbGVtZXRyeURhdGEoKSkpLG9uZ29pbmdSZXF1ZXN0fSxSZXF1ZXN0QnVpbGRlci5wcm90b3R5cGUuZ2V0VGVsZW1ldHJ5RGF0YT1mdW5jdGlvbigpe3ZhciB0ZWxlbWV0cnlOYW1lPXRoaXMuX3VuaXZlcnNhbExvZ2luUGFnZT8iYXV0aDAuanMtdWxwIjoiYXV0aDAuanMiLGNsaWVudEluZm89e25hbWU6dGVsZW1ldHJ5TmFtZSx2ZXJzaW9uOnZlcnNpb24ucmF3fTt0aGlzLl90ZWxlbWV0cnlJbmZvJiYoKGNsaWVudEluZm89b2JqZWN0SGVscGVyLmV4dGVuZCh7fSx0aGlzLl90ZWxlbWV0cnlJbmZvKSkuZW52PW9iamVjdEhlbHBlci5leHRlbmQoe30sdGhpcy5fdGVsZW1ldHJ5SW5mby5lbnYpLGNsaWVudEluZm8uZW52W3RlbGVtZXRyeU5hbWVdPXZlcnNpb24ucmF3KTt2YXIganNvbkNsaWVudEluZm89SlNPTi5zdHJpbmdpZnkoY2xpZW50SW5mbyk7cmV0dXJuIGJhc2U2NFVybC5lbmNvZGUoanNvbkNsaWVudEluZm8pfSxSZXF1ZXN0QnVpbGRlci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHVybCxvcHRpb25zKXtyZXR1cm4gbmV3IFJlcXVlc3RPYmoodGhpcy5zZXRDb21tb25Db25maWd1cmF0aW9uKGNsaWVudC5nZXQodXJsKSxvcHRpb25zKSl9LFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKHVybCxvcHRpb25zKXtyZXR1cm4gbmV3IFJlcXVlc3RPYmoodGhpcy5zZXRDb21tb25Db25maWd1cmF0aW9uKGNsaWVudC5wb3N0KHVybCksb3B0aW9ucykpfSxSZXF1ZXN0QnVpbGRlci5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24odXJsLG9wdGlvbnMpe3JldHVybiBuZXcgUmVxdWVzdE9iaih0aGlzLnNldENvbW1vbkNvbmZpZ3VyYXRpb24oY2xpZW50LnBhdGNoKHVybCksb3B0aW9ucykpfTt2YXIgd2luZG93SGVscGVyPXtyZWRpcmVjdDpmdW5jdGlvbih1cmwpe2dldFdpbmRvdygpLmxvY2F0aW9uPXVybH0sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ2V0V2luZG93KCkuZG9jdW1lbnR9LGdldFdpbmRvdzpnZXRXaW5kb3csZ2V0T3JpZ2luOmZ1bmN0aW9uKCl7dmFyIGxvY2F0aW9uPWdldFdpbmRvdygpLmxvY2F0aW9uLG9yaWdpbj1sb2NhdGlvbi5vcmlnaW47cmV0dXJuIG9yaWdpbnx8KG9yaWdpbj1vYmplY3RIZWxwZXIuZ2V0T3JpZ2luRnJvbVVybChsb2NhdGlvbi5ocmVmKSksb3JpZ2lufX07ZnVuY3Rpb24gRHVtbXlTdG9yYWdlKCl7fUR1bW15U3RvcmFnZS5wcm90b3R5cGUuZ2V0SXRlbT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxEdW1teVN0b3JhZ2UucHJvdG90eXBlLnJlbW92ZUl0ZW09ZnVuY3Rpb24oKXt9LER1bW15U3RvcmFnZS5wcm90b3R5cGUuc2V0SXRlbT1mdW5jdGlvbigpe307dmFyIGpzX2Nvb2tpZT1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7dmFyIGZhY3Rvcnk7ZmFjdG9yeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGV4dGVuZCgpe2Zvcih2YXIgaT0wLHJlc3VsdD17fTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgYXR0cmlidXRlcz1hcmd1bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gYXR0cmlidXRlcylyZXN1bHRba2V5XT1hdHRyaWJ1dGVzW2tleV19cmV0dXJuIHJlc3VsdH1yZXR1cm4gZnVuY3Rpb24gaW5pdChjb252ZXJ0ZXIpe2Z1bmN0aW9uIGFwaShrZXksdmFsdWUsYXR0cmlidXRlcyl7dmFyIHJlc3VsdDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2lmKCJudW1iZXIiPT10eXBlb2YoYXR0cmlidXRlcz1leHRlbmQoe3BhdGg6Ii8ifSxhcGkuZGVmYXVsdHMsYXR0cmlidXRlcykpLmV4cGlyZXMpe3ZhciBleHBpcmVzPW5ldyBEYXRlO2V4cGlyZXMuc2V0TWlsbGlzZWNvbmRzKGV4cGlyZXMuZ2V0TWlsbGlzZWNvbmRzKCkrODY0ZTUqYXR0cmlidXRlcy5leHBpcmVzKSxhdHRyaWJ1dGVzLmV4cGlyZXM9ZXhwaXJlc31hdHRyaWJ1dGVzLmV4cGlyZXM9YXR0cmlidXRlcy5leHBpcmVzP2F0dHJpYnV0ZXMuZXhwaXJlcy50b1VUQ1N0cmluZygpOiIiO3RyeXtyZXN1bHQ9SlNPTi5zdHJpbmdpZnkodmFsdWUpLC9eW1x7XFtdLy50ZXN0KHJlc3VsdCkmJih2YWx1ZT1yZXN1bHQpfWNhdGNoKGUpe312YWx1ZT1jb252ZXJ0ZXIud3JpdGU/Y29udmVydGVyLndyaXRlKHZhbHVlLGtleSk6ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh2YWx1ZSkpLnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8M0F8M0N8M0V8M0R8MkZ8M0Z8NDB8NUJ8NUR8NUV8NjB8N0J8N0R8N0MpL2csZGVjb2RlVVJJQ29tcG9uZW50KSxrZXk9KGtleT0oa2V5PWVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoa2V5KSkpLnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csZGVjb2RlVVJJQ29tcG9uZW50KSkucmVwbGFjZSgvW1woXCldL2csZXNjYXBlKTt2YXIgc3RyaW5naWZpZWRBdHRyaWJ1dGVzPSIiO2Zvcih2YXIgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0mJihzdHJpbmdpZmllZEF0dHJpYnV0ZXMrPSI7ICIrYXR0cmlidXRlTmFtZSwhMCE9PWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0mJihzdHJpbmdpZmllZEF0dHJpYnV0ZXMrPSI9IithdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdKSk7cmV0dXJuIGRvY3VtZW50LmNvb2tpZT1rZXkrIj0iK3ZhbHVlK3N0cmluZ2lmaWVkQXR0cmlidXRlc31rZXl8fChyZXN1bHQ9e30pO2Zvcih2YXIgY29va2llcz1kb2N1bWVudC5jb29raWU/ZG9jdW1lbnQuY29va2llLnNwbGl0KCI7ICIpOltdLHJkZWNvZGU9LyglWzAtOUEtWl17Mn0pKy9nLGk9MDtpPGNvb2tpZXMubGVuZ3RoO2krKyl7dmFyIHBhcnRzPWNvb2tpZXNbaV0uc3BsaXQoIj0iKSxjb29raWU9cGFydHMuc2xpY2UoMSkuam9pbigiPSIpO3RoaXMuanNvbnx8JyInIT09Y29va2llLmNoYXJBdCgwKXx8KGNvb2tpZT1jb29raWUuc2xpY2UoMSwtMSkpO3RyeXt2YXIgbmFtZT1wYXJ0c1swXS5yZXBsYWNlKHJkZWNvZGUsZGVjb2RlVVJJQ29tcG9uZW50KTtpZihjb29raWU9Y29udmVydGVyLnJlYWQ/Y29udmVydGVyLnJlYWQoY29va2llLG5hbWUpOmNvbnZlcnRlcihjb29raWUsbmFtZSl8fGNvb2tpZS5yZXBsYWNlKHJkZWNvZGUsZGVjb2RlVVJJQ29tcG9uZW50KSx0aGlzLmpzb24pdHJ5e2Nvb2tpZT1KU09OLnBhcnNlKGNvb2tpZSl9Y2F0Y2goZSl7fWlmKGtleT09PW5hbWUpe3Jlc3VsdD1jb29raWU7YnJlYWt9a2V5fHwocmVzdWx0W25hbWVdPWNvb2tpZSl9Y2F0Y2goZSl7fX1yZXR1cm4gcmVzdWx0fX1yZXR1cm4gYXBpLnNldD1hcGksYXBpLmdldD1mdW5jdGlvbihrZXkpe3JldHVybiBhcGkuY2FsbChhcGksa2V5KX0sYXBpLmdldEpTT049ZnVuY3Rpb24oKXtyZXR1cm4gYXBpLmFwcGx5KHtqc29uOiEwfSxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfSxhcGkuZGVmYXVsdHM9e30sYXBpLnJlbW92ZT1mdW5jdGlvbihrZXksYXR0cmlidXRlcyl7YXBpKGtleSwiIixleHRlbmQoYXR0cmlidXRlcyx7ZXhwaXJlczotMX0pKX0sYXBpLndpdGhDb252ZXJ0ZXI9aW5pdCxhcGl9KGZ1bmN0aW9uKCl7fSl9LG1vZHVsZS5leHBvcnRzPWZhY3RvcnkoKX0pO2Z1bmN0aW9uIENvb2tpZVN0b3JhZ2UoKXt9ZnVuY3Rpb24gV2FybihvcHRpb25zKXt0aGlzLmRpc2FibGVXYXJuaW5ncz1vcHRpb25zLmRpc2FibGVXYXJuaW5nc31mdW5jdGlvbiBTdG9yYWdlSGFuZGxlcihvcHRpb25zKXtpZih0aGlzLndhcm49bmV3IFdhcm4oe30pLHRoaXMuc3RvcmFnZT1uZXcgQ29va2llU3RvcmFnZSwhMD09PW9wdGlvbnMuX190cnlMb2NhbFN0b3JhZ2VGaXJzdCl0cnl7dmFyIGxvY2FsU3RvcmFnZT13aW5kb3dIZWxwZXIuZ2V0V2luZG93KCkubG9jYWxTdG9yYWdlO2xvY2FsU3RvcmFnZSYmKHRoaXMuc3RvcmFnZT1sb2NhbFN0b3JhZ2UpfWNhdGNoKGUpe3RoaXMud2Fybi53YXJuaW5nKGUpLHRoaXMud2Fybi53YXJuaW5nKCJDYW4ndCB1c2UgbG9jYWxTdG9yYWdlLiBVc2luZyBDb29raWVTdG9yYWdlIGluc3RlYWQuIil9fWZ1bmN0aW9uIFN0b3JhZ2Uob3B0aW9ucyl7dGhpcy5oYW5kbGVyPW5ldyBTdG9yYWdlSGFuZGxlcihvcHRpb25zKX1mdW5jdGlvbiBTU09EYXRhU3RvcmFnZShvcHRpb25zKXt0aGlzLnN0b3JhZ2U9bmV3IFN0b3JhZ2Uob3B0aW9ucyl9ZnVuY3Rpb24gYnVpbGRSZXNwb25zZShlcnJvcixkZXNjcmlwdGlvbil7cmV0dXJue2Vycm9yOmVycm9yLGVycm9yRGVzY3JpcHRpb246ZGVzY3JpcHRpb259fUNvb2tpZVN0b3JhZ2UucHJvdG90eXBlLmdldEl0ZW09ZnVuY3Rpb24oa2V5KXtyZXR1cm4ganNfY29va2llLmdldChrZXkpfSxDb29raWVTdG9yYWdlLnByb3RvdHlwZS5yZW1vdmVJdGVtPWZ1bmN0aW9uKGtleSl7anNfY29va2llLnJlbW92ZShrZXkpfSxDb29raWVTdG9yYWdlLnByb3RvdHlwZS5zZXRJdGVtPWZ1bmN0aW9uKGtleSx2YWx1ZSxvcHRpb25zKXt2YXIgcGFyYW1zPW9iamVjdEhlbHBlci5leHRlbmQoe2V4cGlyZXM6MX0sb3B0aW9ucyk7anNfY29va2llLnNldChrZXksdmFsdWUscGFyYW1zKX0sV2Fybi5wcm90b3R5cGUud2FybmluZz1mdW5jdGlvbihtZXNzYWdlKXt0aGlzLmRpc2FibGVXYXJuaW5nc3x8Y29uc29sZS53YXJuKG1lc3NhZ2UpfSxTdG9yYWdlSGFuZGxlci5wcm90b3R5cGUuZmFpbG92ZXI9ZnVuY3Rpb24oKXt0aGlzLnN0b3JhZ2UgaW5zdGFuY2VvZiBEdW1teVN0b3JhZ2U/dGhpcy53YXJuLndhcm5pbmcoIkR1bW15U3RvcmFnZTogaWdub3JlIGZhaWxvdmVyIik6dGhpcy5zdG9yYWdlIGluc3RhbmNlb2YgQ29va2llU3RvcmFnZT8odGhpcy53YXJuLndhcm5pbmcoIkNvb2tpZVN0b3JhZ2U6IGZhaWxpbmcgb3ZlciBEdW1teVN0b3JhZ2UiKSx0aGlzLnN0b3JhZ2U9bmV3IER1bW15U3RvcmFnZSk6KHRoaXMud2Fybi53YXJuaW5nKCJMb2NhbFN0b3JhZ2U6IGZhaWxpbmcgb3ZlciBDb29raWVTdG9yYWdlIiksdGhpcy5zdG9yYWdlPW5ldyBDb29raWVTdG9yYWdlKX0sU3RvcmFnZUhhbmRsZXIucHJvdG90eXBlLmdldEl0ZW09ZnVuY3Rpb24oa2V5KXt0cnl7cmV0dXJuIHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSl9Y2F0Y2goZSl7cmV0dXJuIHRoaXMud2Fybi53YXJuaW5nKGUpLHRoaXMuZmFpbG92ZXIoKSx0aGlzLmdldEl0ZW0oa2V5KX19LFN0b3JhZ2VIYW5kbGVyLnByb3RvdHlwZS5yZW1vdmVJdGVtPWZ1bmN0aW9uKGtleSl7dHJ5e3JldHVybiB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpfWNhdGNoKGUpe3JldHVybiB0aGlzLndhcm4ud2FybmluZyhlKSx0aGlzLmZhaWxvdmVyKCksdGhpcy5yZW1vdmVJdGVtKGtleSl9fSxTdG9yYWdlSGFuZGxlci5wcm90b3R5cGUuc2V0SXRlbT1mdW5jdGlvbihrZXksdmFsdWUsb3B0aW9ucyl7dHJ5e3JldHVybiB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksdmFsdWUsb3B0aW9ucyl9Y2F0Y2goZSl7cmV0dXJuIHRoaXMud2Fybi53YXJuaW5nKGUpLHRoaXMuZmFpbG92ZXIoKSx0aGlzLnNldEl0ZW0oa2V5LHZhbHVlLG9wdGlvbnMpfX0sU3RvcmFnZS5wcm90b3R5cGUuZ2V0SXRlbT1mdW5jdGlvbihrZXkpe3ZhciB2YWx1ZT10aGlzLmhhbmRsZXIuZ2V0SXRlbShrZXkpO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSl9Y2F0Y2goXyl7cmV0dXJuIHZhbHVlfX0sU3RvcmFnZS5wcm90b3R5cGUucmVtb3ZlSXRlbT1mdW5jdGlvbihrZXkpe3JldHVybiB0aGlzLmhhbmRsZXIucmVtb3ZlSXRlbShrZXkpfSxTdG9yYWdlLnByb3RvdHlwZS5zZXRJdGVtPWZ1bmN0aW9uKGtleSx2YWx1ZSxvcHRpb25zKXt2YXIganNvbj1KU09OLnN0cmluZ2lmeSh2YWx1ZSk7cmV0dXJuIHRoaXMuaGFuZGxlci5zZXRJdGVtKGtleSxqc29uLG9wdGlvbnMpfSxTU09EYXRhU3RvcmFnZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGNvbm5lY3Rpb24sc3ViKXt2YXIgc3NvZGF0YT17bGFzdFVzZWRDb25uZWN0aW9uOmNvbm5lY3Rpb24sbGFzdFVzZWRTdWI6c3VifTt0aGlzLnN0b3JhZ2Uuc2V0SXRlbSgiYXV0aDAuc3NvZGF0YSIsSlNPTi5zdHJpbmdpZnkoc3NvZGF0YSkpfSxTU09EYXRhU3RvcmFnZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7dmFyIHNzb2RhdGE9dGhpcy5zdG9yYWdlLmdldEl0ZW0oImF1dGgwLnNzb2RhdGEiKTtpZihzc29kYXRhKXJldHVybiBKU09OLnBhcnNlKHNzb2RhdGEpfTt2YXIgZXJyb3I9e2J1aWxkUmVzcG9uc2U6YnVpbGRSZXNwb25zZSxpbnZhbGlkVG9rZW46ZnVuY3Rpb24oZGVzY3JpcHRpb24pe3JldHVybiBidWlsZFJlc3BvbnNlKCJpbnZhbGlkX3Rva2VuIixkZXNjcmlwdGlvbil9fTtmdW5jdGlvbiB3cmFwQ2FsbGJhY2soY2Isb3B0aW9ucyl7cmV0dXJuKG9wdGlvbnM9b3B0aW9uc3x8e30pLmlnbm9yZUNhc2luZz0hIW9wdGlvbnMuaWdub3JlQ2FzaW5nJiZvcHRpb25zLmlnbm9yZUNhc2luZyxmdW5jdGlvbihlcnIsZGF0YSl7dmFyIGVyck9iajtyZXR1cm4gZXJyfHxkYXRhPyghZXJyJiZkYXRhLmVyciYmKGVycj1kYXRhLmVycixkYXRhPW51bGwpLCFlcnImJmRhdGEuZXJyb3ImJihlcnI9ZGF0YSxkYXRhPW51bGwpLGVycj8oZXJyT2JqPXtvcmlnaW5hbDplcnJ9LGVyci5yZXNwb25zZSYmZXJyLnJlc3BvbnNlLnN0YXR1c0NvZGUmJihlcnJPYmouc3RhdHVzQ29kZT1lcnIucmVzcG9uc2Uuc3RhdHVzQ29kZSksZXJyLnJlc3BvbnNlJiZlcnIucmVzcG9uc2Uuc3RhdHVzVGV4dCYmKGVyck9iai5zdGF0dXNUZXh0PWVyci5yZXNwb25zZS5zdGF0dXNUZXh0KSxlcnIucmVzcG9uc2UmJmVyci5yZXNwb25zZS5ib2R5JiYoZXJyPWVyci5yZXNwb25zZS5ib2R5KSxlcnIuZXJyJiYoZXJyPWVyci5lcnIpLGVyck9iai5jb2RlPWVyci5jb2RlfHxlcnIuZXJyb3J8fGVyci5lcnJvcl9jb2RlfHxlcnIuc3RhdHVzfHxudWxsLGVyck9iai5kZXNjcmlwdGlvbj1lcnIuZXJyb3JEZXNjcmlwdGlvbnx8ZXJyLmVycm9yX2Rlc2NyaXB0aW9ufHxlcnIuZGVzY3JpcHRpb258fGVyci5lcnJvcnx8ZXJyLmRldGFpbHN8fGVyci5lcnJ8fG51bGwsb3B0aW9ucy5mb3JjZUxlZ2FjeUVycm9yJiYoZXJyT2JqLmVycm9yPWVyck9iai5jb2RlLGVyck9iai5lcnJvcl9kZXNjcmlwdGlvbj1lcnJPYmouZGVzY3JpcHRpb24pLGVyci5uYW1lJiYoZXJyT2JqLm5hbWU9ZXJyLm5hbWUpLGVyci5wb2xpY3kmJihlcnJPYmoucG9saWN5PWVyci5wb2xpY3kpLGNiKGVyck9iaikpOiFkYXRhLnR5cGV8fCJ0ZXh0L2h0bWwiIT09ZGF0YS50eXBlJiYidGV4dC9wbGFpbiIhPT1kYXRhLnR5cGU/b3B0aW9ucy5pZ25vcmVDYXNpbmc/Y2IobnVsbCxkYXRhLmJvZHl8fGRhdGEpOmNiKG51bGwsb2JqZWN0SGVscGVyLnRvQ2FtZWxDYXNlKGRhdGEuYm9keXx8ZGF0YSxbXSx7a2VlcE9yaWdpbmFsOm9wdGlvbnMua2VlcE9yaWdpbmFsQ2FzaW5nfSkpOmNiKG51bGwsZGF0YS50ZXh0KSk6Y2IoZXJyb3IuYnVpbGRSZXNwb25zZSgiZ2VuZXJpY19lcnJvciIsIlNvbWV0aGluZyB3ZW50IHdyb25nIikpfX12YXIgdG9rZW5QYXJhbXM9WyJyZWFsbSIsImF1ZGllbmNlIiwiY2xpZW50X2lkIiwiY2xpZW50X3NlY3JldCIsInJlZGlyZWN0X3VyaSIsInNjb3BlIiwiY29kZSIsImdyYW50X3R5cGUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwicmVmcmVzaF90b2tlbiIsImFzc2VydGlvbiIsImNsaWVudF9hc3NlcnRpb24iLCJjbGllbnRfYXNzZXJ0aW9uX3R5cGUiLCJjb2RlX3ZlcmlmaWVyIl0sYXV0aG9yaXplUGFyYW1zPVsiY29ubmVjdGlvbiIsImNvbm5lY3Rpb25fc2NvcGUiLCJhdXRoMENsaWVudCIsIm93cCIsImRldmljZSIsInJlYWxtIiwicHJvdG9jb2wiLCJfY3NyZiIsIl9pbnRzdGF0ZSIsImxvZ2luX3RpY2tldCIsImNsaWVudF9pZCIsInJlc3BvbnNlX3R5cGUiLCJyZXNwb25zZV9tb2RlIiwicmVkaXJlY3RfdXJpIiwiYXVkaWVuY2UiLCJzY29wZSIsInN0YXRlIiwibm9uY2UiLCJkaXNwbGF5IiwicHJvbXB0IiwibWF4X2FnZSIsInVpX2xvY2FsZXMiLCJjbGFpbXNfbG9jYWxlcyIsImlkX3Rva2VuX2hpbnQiLCJsb2dpbl9oaW50IiwiYWNyX3ZhbHVlcyIsImNsYWltcyIsInJlZ2lzdHJhdGlvbiIsInJlcXVlc3QiLCJyZXF1ZXN0X3VyaSIsImNvZGVfY2hhbGxlbmdlIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiYWNjZXNzX3R5cGUiLCJkaXNwbGF5Il07dmFyIHBhcmFtZXRlcnNXaGl0ZWxpc3Q9e29hdXRoVG9rZW5QYXJhbXM6ZnVuY3Rpb24od2FybixwYXJhbXMpe3JldHVybiBvYmplY3RIZWxwZXIucGljayhwYXJhbXMsdG9rZW5QYXJhbXMpfSxvYXV0aEF1dGhvcml6ZVBhcmFtczpmdW5jdGlvbih3YXJuLHBhcmFtcyl7dmFyIG5vdEFsbG93ZWQ9b2JqZWN0SGVscGVyLmdldEtleXNOb3RJbihwYXJhbXMsYXV0aG9yaXplUGFyYW1zKTtyZXR1cm4gbm90QWxsb3dlZC5sZW5ndGg+MCYmd2Fybi53YXJuaW5nKCJGb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgbm90IGFsbG93ZWQgb24gdGhlIGAvYXV0aG9yaXplYCBlbmRwb2ludDogWyIrbm90QWxsb3dlZC5qb2luKCIsIikrIl0iKSxwYXJhbXN9fSx0PSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gcih0LHIpe3JldHVybiB0KHI9e2V4cG9ydHM6e319LHIuZXhwb3J0cyksci5leHBvcnRzfXZhciBlPXIoZnVuY3Rpb24odCxyKXt2YXIgZTt0LmV4cG9ydHM9ZT1lfHxmdW5jdGlvbih0LHIpe3ZhciBlPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gZnVuY3Rpb24ocil7dmFyIGU7cmV0dXJuIHQucHJvdG90eXBlPXIsZT1uZXcgdCx0LnByb3RvdHlwZT1udWxsLGV9fSgpLGk9e30sbj1pLmxpYj17fSxvPW4uQmFzZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciByPWUodGhpcyk7cmV0dXJuIHQmJnIubWl4SW4odCksci5oYXNPd25Qcm9wZXJ0eSgiaW5pdCIpJiZ0aGlzLmluaXQhPT1yLmluaXR8fChyLmluaXQ9ZnVuY3Rpb24oKXtyLiRzdXBlci5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHIuaW5pdC5wcm90b3R5cGU9cixyLiRzdXBlcj10aGlzLHJ9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZXh0ZW5kKCk7cmV0dXJuIHQuaW5pdC5hcHBseSh0LGFyZ3VtZW50cyksdH0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKHRoaXNbcl09dFtyXSk7dC5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYmKHRoaXMudG9TdHJpbmc9dC50b1N0cmluZyl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX0scz1uLldvcmRBcnJheT1vLmV4dGVuZCh7aW5pdDpmdW5jdGlvbih0LHIpe3Q9dGhpcy53b3Jkcz10fHxbXSx0aGlzLnNpZ0J5dGVzPW51bGwhPXI/cjo0KnQubGVuZ3RofSx0b1N0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4odHx8YSkuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy53b3JkcyxlPXQud29yZHMsaT10aGlzLnNpZ0J5dGVzLG49dC5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksaSU0KWZvcih2YXIgbz0wO288bjtvKyspe3ZhciBzPWVbbz4+PjJdPj4+MjQtbyU0KjgmMjU1O3JbaStvPj4+Ml18PXM8PDI0LShpK28pJTQqOH1lbHNlIGZvcihvPTA7bzxuO28rPTQpcltpK28+Pj4yXT1lW28+Pj4yXTtyZXR1cm4gdGhpcy5zaWdCeXRlcys9bix0aGlzfSxjbGFtcDpmdW5jdGlvbigpe3ZhciByPXRoaXMud29yZHMsZT10aGlzLnNpZ0J5dGVzO3JbZT4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1lJTQqOCxyLmxlbmd0aD10LmNlaWwoZS80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgdD1vLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIHQud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSx0fSxyYW5kb206ZnVuY3Rpb24ocil7Zm9yKHZhciBlLGk9W10sbj1mdW5jdGlvbihyKXtyPXI7dmFyIGU9OTg3NjU0MzIxLGk9NDI5NDk2NzI5NTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj0oKGU9MzY5NjkqKDY1NTM1JmUpKyhlPj4xNikmaSk8PDE2KSsocj0xOGUzKig2NTUzNSZyKSsocj4+MTYpJmkpJmk7cmV0dXJuIG4vPTQyOTQ5NjcyOTYsKG4rPS41KSoodC5yYW5kb20oKT4uNT8xOi0xKX19LG89MDtvPHI7bys9NCl7dmFyIGg9big0Mjk0OTY3Mjk2KihlfHx0LnJhbmRvbSgpKSk7ZT05ODc2NTQwNzEqaCgpLGkucHVzaCg0Mjk0OTY3Mjk2KmgoKXwwKX1yZXR1cm4gbmV3IHMuaW5pdChpLHIpfX0pLGg9aS5lbmM9e30sYT1oLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10LndvcmRzLGU9dC5zaWdCeXRlcyxpPVtdLG49MDtuPGU7bisrKXt2YXIgbz1yW24+Pj4yXT4+PjI0LW4lNCo4JjI1NTtpLnB1c2goKG8+Pj40KS50b1N0cmluZygxNikpLGkucHVzaCgoMTUmbykudG9TdHJpbmcoMTYpKX1yZXR1cm4gaS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24odCl7Zm9yKHZhciByPXQubGVuZ3RoLGU9W10saT0wO2k8cjtpKz0yKWVbaT4+PjNdfD1wYXJzZUludCh0LnN1YnN0cihpLDIpLDE2KTw8MjQtaSU4KjQ7cmV0dXJuIG5ldyBzLmluaXQoZSxyLzIpfX0sdT1oLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10LndvcmRzLGU9dC5zaWdCeXRlcyxpPVtdLG49MDtuPGU7bisrKXt2YXIgbz1yW24+Pj4yXT4+PjI0LW4lNCo4JjI1NTtpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShvKSl9cmV0dXJuIGkuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxlPVtdLGk9MDtpPHI7aSsrKWVbaT4+PjJdfD0oMjU1JnQuY2hhckNvZGVBdChpKSk8PDI0LWklNCo4O3JldHVybiBuZXcgcy5pbml0KGUscil9fSxmPWguVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh1LnN0cmluZ2lmeSh0KSkpfWNhdGNoKHQpe3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIFVURi04IGRhdGEiKX19LHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiB1LnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh0KSkpfX0sYz1uLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09by5leHRlbmQoe3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgcy5pbml0LHRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PWYucGFyc2UodCkpLHRoaXMuX2RhdGEuY29uY2F0KHQpLHRoaXMuX25EYXRhQnl0ZXMrPXQuc2lnQnl0ZXN9LF9wcm9jZXNzOmZ1bmN0aW9uKHIpe3ZhciBlPXRoaXMuX2RhdGEsaT1lLndvcmRzLG49ZS5zaWdCeXRlcyxvPXRoaXMuYmxvY2tTaXplLGE9bi8oNCpvKSx1PShhPXI/dC5jZWlsKGEpOnQubWF4KCgwfGEpLXRoaXMuX21pbkJ1ZmZlclNpemUsMCkpKm8sZj10Lm1pbig0KnUsbik7aWYodSl7Zm9yKHZhciBjPTA7Yzx1O2MrPW8pdGhpcy5fZG9Qcm9jZXNzQmxvY2soaSxjKTt2YXIgcD1pLnNwbGljZSgwLHUpO2Uuc2lnQnl0ZXMtPWZ9cmV0dXJuIG5ldyBzLmluaXQocCxmKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgdD1vLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIHQuX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpLHR9LF9taW5CdWZmZXJTaXplOjB9KSxwPShuLkhhc2hlcj1jLmV4dGVuZCh7Y2ZnOm8uZXh0ZW5kKCksaW5pdDpmdW5jdGlvbih0KXt0aGlzLmNmZz10aGlzLmNmZy5leHRlbmQodCksdGhpcy5yZXNldCgpfSxyZXNldDpmdW5jdGlvbigpe2MucmVzZXQuY2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9LHVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXBwZW5kKHQpLHRoaXMuX3Byb2Nlc3MoKSx0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5fYXBwZW5kKHQpLHRoaXMuX2RvRmluYWxpemUoKX0sYmxvY2tTaXplOjE2LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHIsZSl7cmV0dXJuIG5ldyB0LmluaXQoZSkuZmluYWxpemUocil9fSxfY3JlYXRlSG1hY0hlbHBlcjpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24ocixlKXtyZXR1cm4gbmV3IHAuSE1BQy5pbml0KHQsZSkuZmluYWxpemUocil9fX0pLGkuYWxnbz17fSk7cmV0dXJuIGl9KE1hdGgpfSksaSQxPXIoZnVuY3Rpb24odCxyKXt2YXIgaTt0LmV4cG9ydHM9KGk9ZSxmdW5jdGlvbih0KXt2YXIgcj1pLGU9ci5saWIsbj1lLldvcmRBcnJheSxvPWUuSGFzaGVyLHM9ci5hbGdvLGg9W10sYT1bXTshZnVuY3Rpb24oKXtmdW5jdGlvbiByKHIpe2Zvcih2YXIgZT10LnNxcnQociksaT0yO2k8PWU7aSsrKWlmKCEociVpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBlKHQpe3JldHVybiA0Mjk0OTY3Mjk2Kih0LSgwfHQpKXwwfWZvcih2YXIgaT0yLG49MDtuPDY0OylyKGkpJiYobjw4JiYoaFtuXT1lKHQucG93KGksLjUpKSksYVtuXT1lKHQucG93KGksMS8zKSksbisrKSxpKyt9KCk7dmFyIHU9W10sZj1zLlNIQTI1Nj1vLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBuLmluaXQoaC5zbGljZSgwKSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbih0LHIpe2Zvcih2YXIgZT10aGlzLl9oYXNoLndvcmRzLGk9ZVswXSxuPWVbMV0sbz1lWzJdLHM9ZVszXSxoPWVbNF0sZj1lWzVdLGM9ZVs2XSxwPWVbN10sbD0wO2w8NjQ7bCsrKXtpZihsPDE2KXVbbF09MHx0W3IrbF07ZWxzZXt2YXIgZD11W2wtMTVdLHY9dVtsLTJdO3VbbF09KChkPDwyNXxkPj4+NyleKGQ8PDE0fGQ+Pj4xOCleZD4+PjMpK3VbbC03XSsoKHY8PDE1fHY+Pj4xNyleKHY8PDEzfHY+Pj4xOSledj4+PjEwKSt1W2wtMTZdfXZhciB5PWkmbl5pJm9ebiZvLG09cCsoKGg8PDI2fGg+Pj42KV4oaDw8MjF8aD4+PjExKV4oaDw8N3xoPj4+MjUpKSsoaCZmXn5oJmMpK2FbbF0rdVtsXTtwPWMsYz1mLGY9aCxoPXMrbXwwLHM9byxvPW4sbj1pLGk9bSsoKChpPDwzMHxpPj4+MileKGk8PDE5fGk+Pj4xMyleKGk8PDEwfGk+Pj4yMikpK3kpfDB9ZVswXT1lWzBdK2l8MCxlWzFdPWVbMV0rbnwwLGVbMl09ZVsyXStvfDAsZVszXT1lWzNdK3N8MCxlWzRdPWVbNF0raHwwLGVbNV09ZVs1XStmfDAsZVs2XT1lWzZdK2N8MCxlWzddPWVbN10rcHwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciByPXRoaXMuX2RhdGEsZT1yLndvcmRzLGk9OCp0aGlzLl9uRGF0YUJ5dGVzLG49OCpyLnNpZ0J5dGVzO3JldHVybiBlW24+Pj41XXw9MTI4PDwyNC1uJTMyLGVbMTQrKG4rNjQ+Pj45PDw0KV09dC5mbG9vcihpLzQyOTQ5NjcyOTYpLGVbMTUrKG4rNjQ+Pj45PDw0KV09aSxyLnNpZ0J5dGVzPTQqZS5sZW5ndGgsdGhpcy5fcHJvY2VzcygpLHRoaXMuX2hhc2h9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIHQ9by5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiB0Ll9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSx0fX0pO3IuU0hBMjU2PW8uX2NyZWF0ZUhlbHBlcihmKSxyLkhtYWNTSEEyNTY9by5fY3JlYXRlSG1hY0hlbHBlcihmKX0oTWF0aCksaS5TSEEyNTYpfSksbj1yKGZ1bmN0aW9uKHQscil7dmFyIGksbjt0LmV4cG9ydHM9KG49KGk9ZSkubGliLldvcmRBcnJheSxpLmVuYy5CYXNlNjQ9e3N0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgcj10LndvcmRzLGU9dC5zaWdCeXRlcyxpPXRoaXMuX21hcDt0LmNsYW1wKCk7Zm9yKHZhciBuPVtdLG89MDtvPGU7bys9Mylmb3IodmFyIHM9KHJbbz4+PjJdPj4+MjQtbyU0KjgmMjU1KTw8MTZ8KHJbbysxPj4+Ml0+Pj4yNC0obysxKSU0KjgmMjU1KTw8OHxyW28rMj4+PjJdPj4+MjQtKG8rMiklNCo4JjI1NSxoPTA7aDw0JiZvKy43NSpoPGU7aCsrKW4ucHVzaChpLmNoYXJBdChzPj4+NiooMy1oKSY2MykpO3ZhciBhPWkuY2hhckF0KDY0KTtpZihhKWZvcig7bi5sZW5ndGglNDspbi5wdXNoKGEpO3JldHVybiBuLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxlPXRoaXMuX21hcCxpPXRoaXMuX3JldmVyc2VNYXA7aWYoIWkpe2k9dGhpcy5fcmV2ZXJzZU1hcD1bXTtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKylpW2UuY2hhckNvZGVBdChvKV09b312YXIgcz1lLmNoYXJBdCg2NCk7aWYocyl7dmFyIGg9dC5pbmRleE9mKHMpOy0xIT09aCYmKHI9aCl9cmV0dXJuIGZ1bmN0aW9uKHQscixlKXtmb3IodmFyIGk9W10sbz0wLHM9MDtzPHI7cysrKWlmKHMlNCl7dmFyIGg9ZVt0LmNoYXJDb2RlQXQocy0xKV08PHMlNCoyLGE9ZVt0LmNoYXJDb2RlQXQocyldPj4+Ni1zJTQqMjtpW28+Pj4yXXw9KGh8YSk8PDI0LW8lNCo4LG8rK31yZXR1cm4gbi5jcmVhdGUoaSxvKX0odCxyLGkpfSxfbWFwOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSJ9LGkuZW5jLkJhc2U2NCl9KSxvPXIoZnVuY3Rpb24odCxyKXt0LmV4cG9ydHM9ZS5lbmMuSGV4fSkscz1yKGZ1bmN0aW9uKHIsZSl7KGZ1bmN0aW9uKCl7dmFyIHQ7ZnVuY3Rpb24gZSh0LHIsZSl7bnVsbCE9dCYmKCJudW1iZXIiPT10eXBlb2YgdD90aGlzLmZyb21OdW1iZXIodCxyLGUpOnRoaXMuZnJvbVN0cmluZyh0LG51bGw9PXImJiJzdHJpbmciIT10eXBlb2YgdD8yNTY6cikpfWZ1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IGUobnVsbCl9dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3I7biYmIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciI9PW5hdmlnYXRvci5hcHBOYW1lPyhlLnByb3RvdHlwZS5hbT1mdW5jdGlvbih0LHIsZSxpLG4sbyl7Zm9yKHZhciBzPTMyNzY3JnIsaD1yPj4xNTstLW8+PTA7KXt2YXIgYT0zMjc2NyZ0aGlzW3RdLHU9dGhpc1t0KytdPj4xNSxmPWgqYSt1KnM7bj0oKGE9cyphKygoMzI3NjcmZik8PDE1KStlW2ldKygxMDczNzQxODIzJm4pKT4+PjMwKSsoZj4+PjE1KStoKnUrKG4+Pj4zMCksZVtpKytdPTEwNzM3NDE4MjMmYX1yZXR1cm4gbn0sdD0zMCk6biYmIk5ldHNjYXBlIiE9bmF2aWdhdG9yLmFwcE5hbWU/KGUucHJvdG90eXBlLmFtPWZ1bmN0aW9uKHQscixlLGksbixvKXtmb3IoOy0tbz49MDspe3ZhciBzPXIqdGhpc1t0KytdK2VbaV0rbjtuPU1hdGguZmxvb3Iocy82NzEwODg2NCksZVtpKytdPTY3MTA4ODYzJnN9cmV0dXJuIG59LHQ9MjYpOihlLnByb3RvdHlwZS5hbT1mdW5jdGlvbih0LHIsZSxpLG4sbyl7Zm9yKHZhciBzPTE2MzgzJnIsaD1yPj4xNDstLW8+PTA7KXt2YXIgYT0xNjM4MyZ0aGlzW3RdLHU9dGhpc1t0KytdPj4xNCxmPWgqYSt1KnM7bj0oKGE9cyphKygoMTYzODMmZik8PDE0KStlW2ldK24pPj4yOCkrKGY+PjE0KStoKnUsZVtpKytdPTI2ODQzNTQ1NSZhfXJldHVybiBufSx0PTI4KSxlLnByb3RvdHlwZS5EQj10LGUucHJvdG90eXBlLkRNPSgxPDx0KS0xLGUucHJvdG90eXBlLkRWPTE8PHQsZS5wcm90b3R5cGUuRlY9TWF0aC5wb3coMiw1MiksZS5wcm90b3R5cGUuRjE9NTItdCxlLnByb3RvdHlwZS5GMj0yKnQtNTI7dmFyIG8scyxoPSIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLGE9bmV3IEFycmF5O2ZvcihvPSIwIi5jaGFyQ29kZUF0KDApLHM9MDtzPD05OysrcylhW28rK109cztmb3Iobz0iYSIuY2hhckNvZGVBdCgwKSxzPTEwO3M8MzY7KytzKWFbbysrXT1zO2ZvcihvPSJBIi5jaGFyQ29kZUF0KDApLHM9MTA7czwzNjsrK3MpYVtvKytdPXM7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gaC5jaGFyQXQodCl9ZnVuY3Rpb24gZih0LHIpe3ZhciBlPWFbdC5jaGFyQ29kZUF0KHIpXTtyZXR1cm4gbnVsbD09ZT8tMTplfWZ1bmN0aW9uIGModCl7dmFyIHI9aSgpO3JldHVybiByLmZyb21JbnQodCkscn1mdW5jdGlvbiBwKHQpe3ZhciByLGU9MTtyZXR1cm4gMCE9KHI9dD4+PjE2KSYmKHQ9cixlKz0xNiksMCE9KHI9dD4+OCkmJih0PXIsZSs9OCksMCE9KHI9dD4+NCkmJih0PXIsZSs9NCksMCE9KHI9dD4+MikmJih0PXIsZSs9MiksMCE9KHI9dD4+MSkmJih0PXIsZSs9MSksZX1mdW5jdGlvbiBsKHQpe3RoaXMubT10fWZ1bmN0aW9uIGQodCl7dGhpcy5tPXQsdGhpcy5tcD10LmludkRpZ2l0KCksdGhpcy5tcGw9MzI3NjcmdGhpcy5tcCx0aGlzLm1waD10aGlzLm1wPj4xNSx0aGlzLnVtPSgxPDx0LkRCLTE1KS0xLHRoaXMubXQyPTIqdC50fWZ1bmN0aW9uIHYodCxyKXtyZXR1cm4gdCZyfWZ1bmN0aW9uIHkodCxyKXtyZXR1cm4gdHxyfWZ1bmN0aW9uIG0odCxyKXtyZXR1cm4gdF5yfWZ1bmN0aW9uIGcodCxyKXtyZXR1cm4gdCZ+cn1mdW5jdGlvbiB3KHQpe2lmKDA9PXQpcmV0dXJuLTE7dmFyIHI9MDtyZXR1cm4gMD09KDY1NTM1JnQpJiYodD4+PTE2LHIrPTE2KSwwPT0oMjU1JnQpJiYodD4+PTgscis9OCksMD09KDE1JnQpJiYodD4+PTQscis9NCksMD09KDMmdCkmJih0Pj49MixyKz0yKSwwPT0oMSZ0KSYmKytyLHJ9ZnVuY3Rpb24gVCh0KXtmb3IodmFyIHI9MDswIT10Oyl0Jj10LTEsKytyO3JldHVybiByfWZ1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdH1mdW5jdGlvbiBCKHQpe3RoaXMucjI9aSgpLHRoaXMucTM9aSgpLGUuT05FLmRsU2hpZnRUbygyKnQudCx0aGlzLnIyKSx0aGlzLm11PXRoaXMucjIuZGl2aWRlKHQpLHRoaXMubT10fWwucHJvdG90eXBlLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuczwwfHx0LmNvbXBhcmVUbyh0aGlzLm0pPj0wP3QubW9kKHRoaXMubSk6dH0sbC5wcm90b3R5cGUucmV2ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxsLnByb3RvdHlwZS5yZWR1Y2U9ZnVuY3Rpb24odCl7dC5kaXZSZW1Ubyh0aGlzLm0sbnVsbCx0KX0sbC5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxyLGUpe3QubXVsdGlwbHlUbyhyLGUpLHRoaXMucmVkdWNlKGUpfSxsLnByb3RvdHlwZS5zcXJUbz1mdW5jdGlvbih0LHIpe3Quc3F1YXJlVG8ociksdGhpcy5yZWR1Y2Uocil9LGQucHJvdG90eXBlLmNvbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIHI9aSgpO3JldHVybiB0LmFicygpLmRsU2hpZnRUbyh0aGlzLm0udCxyKSxyLmRpdlJlbVRvKHRoaXMubSxudWxsLHIpLHQuczwwJiZyLmNvbXBhcmVUbyhlLlpFUk8pPjAmJnRoaXMubS5zdWJUbyhyLHIpLHJ9LGQucHJvdG90eXBlLnJldmVydD1mdW5jdGlvbih0KXt2YXIgcj1pKCk7cmV0dXJuIHQuY29weVRvKHIpLHRoaXMucmVkdWNlKHIpLHJ9LGQucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbih0KXtmb3IoO3QudDw9dGhpcy5tdDI7KXRbdC50KytdPTA7Zm9yKHZhciByPTA7cjx0aGlzLm0udDsrK3Ipe3ZhciBlPTMyNzY3JnRbcl0saT1lKnRoaXMubXBsKygoZSp0aGlzLm1waCsodFtyXT4+MTUpKnRoaXMubXBsJnRoaXMudW0pPDwxNSkmdC5ETTtmb3IodFtlPXIrdGhpcy5tLnRdKz10aGlzLm0uYW0oMCxpLHQsciwwLHRoaXMubS50KTt0W2VdPj10LkRWOyl0W2VdLT10LkRWLHRbKytlXSsrfXQuY2xhbXAoKSx0LmRyU2hpZnRUbyh0aGlzLm0udCx0KSx0LmNvbXBhcmVUbyh0aGlzLm0pPj0wJiZ0LnN1YlRvKHRoaXMubSx0KX0sZC5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxyLGUpe3QubXVsdGlwbHlUbyhyLGUpLHRoaXMucmVkdWNlKGUpfSxkLnByb3RvdHlwZS5zcXJUbz1mdW5jdGlvbih0LHIpe3Quc3F1YXJlVG8ociksdGhpcy5yZWR1Y2Uocil9LGUucHJvdG90eXBlLmNvcHlUbz1mdW5jdGlvbih0KXtmb3IodmFyIHI9dGhpcy50LTE7cj49MDstLXIpdFtyXT10aGlzW3JdO3QudD10aGlzLnQsdC5zPXRoaXMuc30sZS5wcm90b3R5cGUuZnJvbUludD1mdW5jdGlvbih0KXt0aGlzLnQ9MSx0aGlzLnM9dDwwPy0xOjAsdD4wP3RoaXNbMF09dDp0PC0xP3RoaXNbMF09dCt0aGlzLkRWOnRoaXMudD0wfSxlLnByb3RvdHlwZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHQscil7dmFyIGk7aWYoMTY9PXIpaT00O2Vsc2UgaWYoOD09cilpPTM7ZWxzZSBpZigyNTY9PXIpaT04O2Vsc2UgaWYoMj09cilpPTE7ZWxzZSBpZigzMj09cilpPTU7ZWxzZXtpZig0IT1yKXJldHVybiB2b2lkIHRoaXMuZnJvbVJhZGl4KHQscik7aT0yfXRoaXMudD0wLHRoaXMucz0wO2Zvcih2YXIgbj10Lmxlbmd0aCxvPSExLHM9MDstLW4+PTA7KXt2YXIgaD04PT1pPzI1NSZ0W25dOmYodCxuKTtoPDA/Ii0iPT10LmNoYXJBdChuKSYmKG89ITApOihvPSExLDA9PXM/dGhpc1t0aGlzLnQrK109aDpzK2k+dGhpcy5EQj8odGhpc1t0aGlzLnQtMV18PShoJigxPDx0aGlzLkRCLXMpLTEpPDxzLHRoaXNbdGhpcy50KytdPWg+PnRoaXMuREItcyk6dGhpc1t0aGlzLnQtMV18PWg8PHMsKHMrPWkpPj10aGlzLkRCJiYocy09dGhpcy5EQikpfTg9PWkmJjAhPSgxMjgmdFswXSkmJih0aGlzLnM9LTEscz4wJiYodGhpc1t0aGlzLnQtMV18PSgxPDx0aGlzLkRCLXMpLTE8PHMpKSx0aGlzLmNsYW1wKCksbyYmZS5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9LGUucHJvdG90eXBlLmNsYW1wPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucyZ0aGlzLkRNO3RoaXMudD4wJiZ0aGlzW3RoaXMudC0xXT09dDspLS10aGlzLnR9LGUucHJvdG90eXBlLmRsU2hpZnRUbz1mdW5jdGlvbih0LHIpe3ZhciBlO2ZvcihlPXRoaXMudC0xO2U+PTA7LS1lKXJbZSt0XT10aGlzW2VdO2ZvcihlPXQtMTtlPj0wOy0tZSlyW2VdPTA7ci50PXRoaXMudCt0LHIucz10aGlzLnN9LGUucHJvdG90eXBlLmRyU2hpZnRUbz1mdW5jdGlvbih0LHIpe2Zvcih2YXIgZT10O2U8dGhpcy50OysrZSlyW2UtdF09dGhpc1tlXTtyLnQ9TWF0aC5tYXgodGhpcy50LXQsMCksci5zPXRoaXMuc30sZS5wcm90b3R5cGUubFNoaWZ0VG89ZnVuY3Rpb24odCxyKXt2YXIgZSxpPXQldGhpcy5EQixuPXRoaXMuREItaSxvPSgxPDxuKS0xLHM9TWF0aC5mbG9vcih0L3RoaXMuREIpLGg9dGhpcy5zPDxpJnRoaXMuRE07Zm9yKGU9dGhpcy50LTE7ZT49MDstLWUpcltlK3MrMV09dGhpc1tlXT4+bnxoLGg9KHRoaXNbZV0mbyk8PGk7Zm9yKGU9cy0xO2U+PTA7LS1lKXJbZV09MDtyW3NdPWgsci50PXRoaXMudCtzKzEsci5zPXRoaXMucyxyLmNsYW1wKCl9LGUucHJvdG90eXBlLnJTaGlmdFRvPWZ1bmN0aW9uKHQscil7ci5zPXRoaXMuczt2YXIgZT1NYXRoLmZsb29yKHQvdGhpcy5EQik7aWYoZT49dGhpcy50KXIudD0wO2Vsc2V7dmFyIGk9dCV0aGlzLkRCLG49dGhpcy5EQi1pLG89KDE8PGkpLTE7clswXT10aGlzW2VdPj5pO2Zvcih2YXIgcz1lKzE7czx0aGlzLnQ7KytzKXJbcy1lLTFdfD0odGhpc1tzXSZvKTw8bixyW3MtZV09dGhpc1tzXT4+aTtpPjAmJihyW3RoaXMudC1lLTFdfD0odGhpcy5zJm8pPDxuKSxyLnQ9dGhpcy50LWUsci5jbGFtcCgpfX0sZS5wcm90b3R5cGUuc3ViVG89ZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9MCxpPTAsbj1NYXRoLm1pbih0LnQsdGhpcy50KTtlPG47KWkrPXRoaXNbZV0tdFtlXSxyW2UrK109aSZ0aGlzLkRNLGk+Pj10aGlzLkRCO2lmKHQudDx0aGlzLnQpe2ZvcihpLT10LnM7ZTx0aGlzLnQ7KWkrPXRoaXNbZV0scltlKytdPWkmdGhpcy5ETSxpPj49dGhpcy5EQjtpKz10aGlzLnN9ZWxzZXtmb3IoaSs9dGhpcy5zO2U8dC50OylpLT10W2VdLHJbZSsrXT1pJnRoaXMuRE0saT4+PXRoaXMuREI7aS09dC5zfXIucz1pPDA/LTE6MCxpPC0xP3JbZSsrXT10aGlzLkRWK2k6aT4wJiYocltlKytdPWkpLHIudD1lLHIuY2xhbXAoKX0sZS5wcm90b3R5cGUubXVsdGlwbHlUbz1mdW5jdGlvbih0LHIpe3ZhciBpPXRoaXMuYWJzKCksbj10LmFicygpLG89aS50O2ZvcihyLnQ9bytuLnQ7LS1vPj0wOylyW29dPTA7Zm9yKG89MDtvPG4udDsrK28pcltvK2kudF09aS5hbSgwLG5bb10scixvLDAsaS50KTtyLnM9MCxyLmNsYW1wKCksdGhpcy5zIT10LnMmJmUuWkVSTy5zdWJUbyhyLHIpfSxlLnByb3RvdHlwZS5zcXVhcmVUbz1mdW5jdGlvbih0KXtmb3IodmFyIHI9dGhpcy5hYnMoKSxlPXQudD0yKnIudDstLWU+PTA7KXRbZV09MDtmb3IoZT0wO2U8ci50LTE7KytlKXt2YXIgaT1yLmFtKGUscltlXSx0LDIqZSwwLDEpOyh0W2Urci50XSs9ci5hbShlKzEsMipyW2VdLHQsMiplKzEsaSxyLnQtZS0xKSk+PXIuRFYmJih0W2Urci50XS09ci5EVix0W2Urci50KzFdPTEpfXQudD4wJiYodFt0LnQtMV0rPXIuYW0oZSxyW2VdLHQsMiplLDAsMSkpLHQucz0wLHQuY2xhbXAoKX0sZS5wcm90b3R5cGUuZGl2UmVtVG89ZnVuY3Rpb24odCxyLG4pe3ZhciBvPXQuYWJzKCk7aWYoIShvLnQ8PTApKXt2YXIgcz10aGlzLmFicygpO2lmKHMudDxvLnQpcmV0dXJuIG51bGwhPXImJnIuZnJvbUludCgwKSx2b2lkKG51bGwhPW4mJnRoaXMuY29weVRvKG4pKTtudWxsPT1uJiYobj1pKCkpO3ZhciBoPWkoKSxhPXRoaXMucyx1PXQucyxmPXRoaXMuREItcChvW28udC0xXSk7Zj4wPyhvLmxTaGlmdFRvKGYsaCkscy5sU2hpZnRUbyhmLG4pKTooby5jb3B5VG8oaCkscy5jb3B5VG8obikpO3ZhciBjPWgudCxsPWhbYy0xXTtpZigwIT1sKXt2YXIgZD1sKigxPDx0aGlzLkYxKSsoYz4xP2hbYy0yXT4+dGhpcy5GMjowKSx2PXRoaXMuRlYvZCx5PSgxPDx0aGlzLkYxKS9kLG09MTw8dGhpcy5GMixnPW4udCx3PWctYyxUPW51bGw9PXI/aSgpOnI7Zm9yKGguZGxTaGlmdFRvKHcsVCksbi5jb21wYXJlVG8oVCk+PTAmJihuW24udCsrXT0xLG4uc3ViVG8oVCxuKSksZS5PTkUuZGxTaGlmdFRvKGMsVCksVC5zdWJUbyhoLGgpO2gudDxjOyloW2gudCsrXT0wO2Zvcig7LS13Pj0wOyl7dmFyIGI9blstLWddPT1sP3RoaXMuRE06TWF0aC5mbG9vcihuW2ddKnYrKG5bZy0xXSttKSp5KTtpZigobltnXSs9aC5hbSgwLGIsbix3LDAsYykpPGIpZm9yKGguZGxTaGlmdFRvKHcsVCksbi5zdWJUbyhULG4pO25bZ108LS1iOyluLnN1YlRvKFQsbil9bnVsbCE9ciYmKG4uZHJTaGlmdFRvKGMsciksYSE9dSYmZS5aRVJPLnN1YlRvKHIscikpLG4udD1jLG4uY2xhbXAoKSxmPjAmJm4uclNoaWZ0VG8oZixuKSxhPDAmJmUuWkVSTy5zdWJUbyhuLG4pfX19LGUucHJvdG90eXBlLmludkRpZ2l0PWZ1bmN0aW9uKCl7aWYodGhpcy50PDEpcmV0dXJuIDA7dmFyIHQ9dGhpc1swXTtpZigwPT0oMSZ0KSlyZXR1cm4gMDt2YXIgcj0zJnQ7cmV0dXJuKHI9KHI9KHI9KHI9ciooMi0oMTUmdCkqcikmMTUpKigyLSgyNTUmdCkqcikmMjU1KSooMi0oKDY1NTM1JnQpKnImNjU1MzUpKSY2NTUzNSkqKDItdCpyJXRoaXMuRFYpJXRoaXMuRFYpPjA/dGhpcy5EVi1yOi1yfSxlLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KHRoaXMudD4wPzEmdGhpc1swXTp0aGlzLnMpfSxlLnByb3RvdHlwZS5leHA9ZnVuY3Rpb24odCxyKXtpZih0PjQyOTQ5NjcyOTV8fHQ8MSlyZXR1cm4gZS5PTkU7dmFyIG49aSgpLG89aSgpLHM9ci5jb252ZXJ0KHRoaXMpLGg9cCh0KS0xO2ZvcihzLmNvcHlUbyhuKTstLWg+PTA7KWlmKHIuc3FyVG8obixvKSwodCYxPDxoKT4wKXIubXVsVG8obyxzLG4pO2Vsc2V7dmFyIGE9bjtuPW8sbz1hfXJldHVybiByLnJldmVydChuKX0sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCl7aWYodGhpcy5zPDApcmV0dXJuIi0iK3RoaXMubmVnYXRlKCkudG9TdHJpbmcodCk7dmFyIHI7aWYoMTY9PXQpcj00O2Vsc2UgaWYoOD09dClyPTM7ZWxzZSBpZigyPT10KXI9MTtlbHNlIGlmKDMyPT10KXI9NTtlbHNle2lmKDQhPXQpcmV0dXJuIHRoaXMudG9SYWRpeCh0KTtyPTJ9dmFyIGUsaT0oMTw8ciktMSxuPSExLG89IiIscz10aGlzLnQsaD10aGlzLkRCLXMqdGhpcy5EQiVyO2lmKHMtLSA+MClmb3IoaDx0aGlzLkRCJiYoZT10aGlzW3NdPj5oKT4wJiYobj0hMCxvPXUoZSkpO3M+PTA7KWg8cj8oZT0odGhpc1tzXSYoMTw8aCktMSk8PHItaCxlfD10aGlzWy0tc10+PihoKz10aGlzLkRCLXIpKTooZT10aGlzW3NdPj4oaC09cikmaSxoPD0wJiYoaCs9dGhpcy5EQiwtLXMpKSxlPjAmJihuPSEwKSxuJiYobys9dShlKSk7cmV0dXJuIG4/bzoiMCJ9LGUucHJvdG90eXBlLm5lZ2F0ZT1mdW5jdGlvbigpe3ZhciB0PWkoKTtyZXR1cm4gZS5aRVJPLnN1YlRvKHRoaXMsdCksdH0sZS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuczwwP3RoaXMubmVnYXRlKCk6dGhpc30sZS5wcm90b3R5cGUuY29tcGFyZVRvPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMucy10LnM7aWYoMCE9cilyZXR1cm4gcjt2YXIgZT10aGlzLnQ7aWYoMCE9KHI9ZS10LnQpKXJldHVybiB0aGlzLnM8MD8tcjpyO2Zvcig7LS1lPj0wOylpZigwIT0ocj10aGlzW2VdLXRbZV0pKXJldHVybiByO3JldHVybiAwfSxlLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50PD0wPzA6dGhpcy5EQioodGhpcy50LTEpK3AodGhpc1t0aGlzLnQtMV1edGhpcy5zJnRoaXMuRE0pfSxlLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7dmFyIHI9aSgpO3JldHVybiB0aGlzLmFicygpLmRpdlJlbVRvKHQsbnVsbCxyKSx0aGlzLnM8MCYmci5jb21wYXJlVG8oZS5aRVJPKT4wJiZ0LnN1YlRvKHIscikscn0sZS5wcm90b3R5cGUubW9kUG93SW50PWZ1bmN0aW9uKHQscil7dmFyIGU7cmV0dXJuIGU9dDwyNTZ8fHIuaXNFdmVuKCk/bmV3IGwocik6bmV3IGQociksdGhpcy5leHAodCxlKX0sZS5aRVJPPWMoMCksZS5PTkU9YygxKSxiLnByb3RvdHlwZS5jb252ZXJ0PVMsYi5wcm90b3R5cGUucmV2ZXJ0PVMsYi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxyLGUpe3QubXVsdGlwbHlUbyhyLGUpfSxiLnByb3RvdHlwZS5zcXJUbz1mdW5jdGlvbih0LHIpe3Quc3F1YXJlVG8ocil9LEIucHJvdG90eXBlLmNvbnZlcnQ9ZnVuY3Rpb24odCl7aWYodC5zPDB8fHQudD4yKnRoaXMubS50KXJldHVybiB0Lm1vZCh0aGlzLm0pO2lmKHQuY29tcGFyZVRvKHRoaXMubSk8MClyZXR1cm4gdDt2YXIgcj1pKCk7cmV0dXJuIHQuY29weVRvKHIpLHRoaXMucmVkdWNlKHIpLHJ9LEIucHJvdG90eXBlLnJldmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sQi5wcm90b3R5cGUucmVkdWNlPWZ1bmN0aW9uKHQpe2Zvcih0LmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpLHQudD50aGlzLm0udCsxJiYodC50PXRoaXMubS50KzEsdC5jbGFtcCgpKSx0aGlzLm11Lm11bHRpcGx5VXBwZXJUbyh0aGlzLnIyLHRoaXMubS50KzEsdGhpcy5xMyksdGhpcy5tLm11bHRpcGx5TG93ZXJUbyh0aGlzLnEzLHRoaXMubS50KzEsdGhpcy5yMik7dC5jb21wYXJlVG8odGhpcy5yMik8MDspdC5kQWRkT2Zmc2V0KDEsdGhpcy5tLnQrMSk7Zm9yKHQuc3ViVG8odGhpcy5yMix0KTt0LmNvbXBhcmVUbyh0aGlzLm0pPj0wOyl0LnN1YlRvKHRoaXMubSx0KX0sQi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxyLGUpe3QubXVsdGlwbHlUbyhyLGUpLHRoaXMucmVkdWNlKGUpfSxCLnByb3RvdHlwZS5zcXJUbz1mdW5jdGlvbih0LHIpe3Quc3F1YXJlVG8ociksdGhpcy5yZWR1Y2Uocil9O3ZhciBELEEsXyx4PVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTddLEU9KDE8PDI2KS94W3gubGVuZ3RoLTFdO2Z1bmN0aW9uIFIoKXt2YXIgdDt0PShuZXcgRGF0ZSkuZ2V0VGltZSgpLEFbXysrXV49MjU1JnQsQVtfKytdXj10Pj44JjI1NSxBW18rK11ePXQ+PjE2JjI1NSxBW18rK11ePXQ+PjI0JjI1NSxfPj1OJiYoXy09Til9aWYoZS5wcm90b3R5cGUuY2h1bmtTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2codCkpfSxlLnByb3RvdHlwZS50b1JhZGl4PWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQmJih0PTEwKSwwPT10aGlzLnNpZ251bSgpfHx0PDJ8fHQ+MzYpcmV0dXJuIjAiO3ZhciByPXRoaXMuY2h1bmtTaXplKHQpLGU9TWF0aC5wb3codCxyKSxuPWMoZSksbz1pKCkscz1pKCksaD0iIjtmb3IodGhpcy5kaXZSZW1UbyhuLG8scyk7by5zaWdudW0oKT4wOyloPShlK3MuaW50VmFsdWUoKSkudG9TdHJpbmcodCkuc3Vic3RyKDEpK2gsby5kaXZSZW1UbyhuLG8scyk7cmV0dXJuIHMuaW50VmFsdWUoKS50b1N0cmluZyh0KStofSxlLnByb3RvdHlwZS5mcm9tUmFkaXg9ZnVuY3Rpb24odCxyKXt0aGlzLmZyb21JbnQoMCksbnVsbD09ciYmKHI9MTApO2Zvcih2YXIgaT10aGlzLmNodW5rU2l6ZShyKSxuPU1hdGgucG93KHIsaSksbz0hMSxzPTAsaD0wLGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIHU9Zih0LGEpO3U8MD8iLSI9PXQuY2hhckF0KGEpJiYwPT10aGlzLnNpZ251bSgpJiYobz0hMCk6KGg9cipoK3UsKytzPj1pJiYodGhpcy5kTXVsdGlwbHkobiksdGhpcy5kQWRkT2Zmc2V0KGgsMCkscz0wLGg9MCkpfXM+MCYmKHRoaXMuZE11bHRpcGx5KE1hdGgucG93KHIscykpLHRoaXMuZEFkZE9mZnNldChoLDApKSxvJiZlLlpFUk8uc3ViVG8odGhpcyx0aGlzKX0sZS5wcm90b3R5cGUuZnJvbU51bWJlcj1mdW5jdGlvbih0LHIsaSl7aWYoIm51bWJlciI9PXR5cGVvZiByKWlmKHQ8Mil0aGlzLmZyb21JbnQoMSk7ZWxzZSBmb3IodGhpcy5mcm9tTnVtYmVyKHQsaSksdGhpcy50ZXN0Qml0KHQtMSl8fHRoaXMuYml0d2lzZVRvKGUuT05FLnNoaWZ0TGVmdCh0LTEpLHksdGhpcyksdGhpcy5pc0V2ZW4oKSYmdGhpcy5kQWRkT2Zmc2V0KDEsMCk7IXRoaXMuaXNQcm9iYWJsZVByaW1lKHIpOyl0aGlzLmRBZGRPZmZzZXQoMiwwKSx0aGlzLmJpdExlbmd0aCgpPnQmJnRoaXMuc3ViVG8oZS5PTkUuc2hpZnRMZWZ0KHQtMSksdGhpcyk7ZWxzZXt2YXIgbj1uZXcgQXJyYXksbz03JnQ7bi5sZW5ndGg9MSsodD4+Myksci5uZXh0Qnl0ZXMobiksbz4wP25bMF0mPSgxPDxvKS0xOm5bMF09MCx0aGlzLmZyb21TdHJpbmcobiwyNTYpfX0sZS5wcm90b3R5cGUuYml0d2lzZVRvPWZ1bmN0aW9uKHQscixlKXt2YXIgaSxuLG89TWF0aC5taW4odC50LHRoaXMudCk7Zm9yKGk9MDtpPG87KytpKWVbaV09cih0aGlzW2ldLHRbaV0pO2lmKHQudDx0aGlzLnQpe2ZvcihuPXQucyZ0aGlzLkRNLGk9bztpPHRoaXMudDsrK2kpZVtpXT1yKHRoaXNbaV0sbik7ZS50PXRoaXMudH1lbHNle2ZvcihuPXRoaXMucyZ0aGlzLkRNLGk9bztpPHQudDsrK2kpZVtpXT1yKG4sdFtpXSk7ZS50PXQudH1lLnM9cih0aGlzLnMsdC5zKSxlLmNsYW1wKCl9LGUucHJvdG90eXBlLmNoYW5nZUJpdD1mdW5jdGlvbih0LHIpe3ZhciBpPWUuT05FLnNoaWZ0TGVmdCh0KTtyZXR1cm4gdGhpcy5iaXR3aXNlVG8oaSxyLGkpLGl9LGUucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPTAsaT0wLG49TWF0aC5taW4odC50LHRoaXMudCk7ZTxuOylpKz10aGlzW2VdK3RbZV0scltlKytdPWkmdGhpcy5ETSxpPj49dGhpcy5EQjtpZih0LnQ8dGhpcy50KXtmb3IoaSs9dC5zO2U8dGhpcy50OylpKz10aGlzW2VdLHJbZSsrXT1pJnRoaXMuRE0saT4+PXRoaXMuREI7aSs9dGhpcy5zfWVsc2V7Zm9yKGkrPXRoaXMucztlPHQudDspaSs9dFtlXSxyW2UrK109aSZ0aGlzLkRNLGk+Pj10aGlzLkRCO2krPXQuc31yLnM9aTwwPy0xOjAsaT4wP3JbZSsrXT1pOmk8LTEmJihyW2UrK109dGhpcy5EVitpKSxyLnQ9ZSxyLmNsYW1wKCl9LGUucHJvdG90eXBlLmRNdWx0aXBseT1mdW5jdGlvbih0KXt0aGlzW3RoaXMudF09dGhpcy5hbSgwLHQtMSx0aGlzLDAsMCx0aGlzLnQpLCsrdGhpcy50LHRoaXMuY2xhbXAoKX0sZS5wcm90b3R5cGUuZEFkZE9mZnNldD1mdW5jdGlvbih0LHIpe2lmKDAhPXQpe2Zvcig7dGhpcy50PD1yOyl0aGlzW3RoaXMudCsrXT0wO2Zvcih0aGlzW3JdKz10O3RoaXNbcl0+PXRoaXMuRFY7KXRoaXNbcl0tPXRoaXMuRFYsKytyPj10aGlzLnQmJih0aGlzW3RoaXMudCsrXT0wKSwrK3RoaXNbcl19fSxlLnByb3RvdHlwZS5tdWx0aXBseUxvd2VyVG89ZnVuY3Rpb24odCxyLGUpe3ZhciBpLG49TWF0aC5taW4odGhpcy50K3QudCxyKTtmb3IoZS5zPTAsZS50PW47bj4wOyllWy0tbl09MDtmb3IoaT1lLnQtdGhpcy50O248aTsrK24pZVtuK3RoaXMudF09dGhpcy5hbSgwLHRbbl0sZSxuLDAsdGhpcy50KTtmb3IoaT1NYXRoLm1pbih0LnQscik7bjxpOysrbil0aGlzLmFtKDAsdFtuXSxlLG4sMCxyLW4pO2UuY2xhbXAoKX0sZS5wcm90b3R5cGUubXVsdGlwbHlVcHBlclRvPWZ1bmN0aW9uKHQscixlKXt2YXIgaT1lLnQ9dGhpcy50K3QudC0gLS1yO2ZvcihlLnM9MDstLWk+PTA7KWVbaV09MDtmb3IoaT1NYXRoLm1heChyLXRoaXMudCwwKTtpPHQudDsrK2kpZVt0aGlzLnQraS1yXT10aGlzLmFtKHItaSx0W2ldLGUsMCwwLHRoaXMudCtpLXIpO2UuY2xhbXAoKSxlLmRyU2hpZnRUbygxLGUpfSxlLnByb3RvdHlwZS5tb2RJbnQ9ZnVuY3Rpb24odCl7aWYodDw9MClyZXR1cm4gMDt2YXIgcj10aGlzLkRWJXQsZT10aGlzLnM8MD90LTE6MDtpZih0aGlzLnQ+MClpZigwPT1yKWU9dGhpc1swXSV0O2Vsc2UgZm9yKHZhciBpPXRoaXMudC0xO2k+PTA7LS1pKWU9KHIqZSt0aGlzW2ldKSV0O3JldHVybiBlfSxlLnByb3RvdHlwZS5taWxsZXJSYWJpbj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLnN1YnRyYWN0KGUuT05FKSxuPXIuZ2V0TG93ZXN0U2V0Qml0KCk7aWYobjw9MClyZXR1cm4hMTt2YXIgbz1yLnNoaWZ0UmlnaHQobik7KHQ9dCsxPj4xKT54Lmxlbmd0aCYmKHQ9eC5sZW5ndGgpO2Zvcih2YXIgcz1pKCksaD0wO2g8dDsrK2gpe3MuZnJvbUludCh4W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSp4Lmxlbmd0aCldKTt2YXIgYT1zLm1vZFBvdyhvLHRoaXMpO2lmKDAhPWEuY29tcGFyZVRvKGUuT05FKSYmMCE9YS5jb21wYXJlVG8ocikpe2Zvcih2YXIgdT0xO3UrKzxuJiYwIT1hLmNvbXBhcmVUbyhyKTspaWYoMD09KGE9YS5tb2RQb3dJbnQoMix0aGlzKSkuY29tcGFyZVRvKGUuT05FKSlyZXR1cm4hMTtpZigwIT1hLmNvbXBhcmVUbyhyKSlyZXR1cm4hMX19cmV0dXJuITB9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9aSgpO3JldHVybiB0aGlzLmNvcHlUbyh0KSx0fSxlLnByb3RvdHlwZS5pbnRWYWx1ZT1mdW5jdGlvbigpe2lmKHRoaXMuczwwKXtpZigxPT10aGlzLnQpcmV0dXJuIHRoaXNbMF0tdGhpcy5EVjtpZigwPT10aGlzLnQpcmV0dXJuLTF9ZWxzZXtpZigxPT10aGlzLnQpcmV0dXJuIHRoaXNbMF07aWYoMD09dGhpcy50KXJldHVybiAwfXJldHVybih0aGlzWzFdJigxPDwzMi10aGlzLkRCKS0xKTw8dGhpcy5EQnx0aGlzWzBdfSxlLnByb3RvdHlwZS5ieXRlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy50P3RoaXMuczp0aGlzWzBdPDwyND4+MjR9LGUucHJvdG90eXBlLnNob3J0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy50P3RoaXMuczp0aGlzWzBdPDwxNj4+MTZ9LGUucHJvdG90eXBlLnNpZ251bT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnM8MD8tMTp0aGlzLnQ8PTB8fDE9PXRoaXMudCYmdGhpc1swXTw9MD8wOjF9LGUucHJvdG90eXBlLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50LHI9bmV3IEFycmF5O3JbMF09dGhpcy5zO3ZhciBlLGk9dGhpcy5EQi10KnRoaXMuREIlOCxuPTA7aWYodC0tID4wKWZvcihpPHRoaXMuREImJihlPXRoaXNbdF0+PmkpIT0odGhpcy5zJnRoaXMuRE0pPj5pJiYocltuKytdPWV8dGhpcy5zPDx0aGlzLkRCLWkpO3Q+PTA7KWk8OD8oZT0odGhpc1t0XSYoMTw8aSktMSk8PDgtaSxlfD10aGlzWy0tdF0+PihpKz10aGlzLkRCLTgpKTooZT10aGlzW3RdPj4oaS09OCkmMjU1LGk8PTAmJihpKz10aGlzLkRCLC0tdCkpLDAhPSgxMjgmZSkmJihlfD0tMjU2KSwwPT1uJiYoMTI4JnRoaXMucykhPSgxMjgmZSkmJisrbiwobj4wfHxlIT10aGlzLnMpJiYocltuKytdPWUpO3JldHVybiByfSxlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PXRoaXMuY29tcGFyZVRvKHQpfSxlLnByb3RvdHlwZS5taW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29tcGFyZVRvKHQpPDA/dGhpczp0fSxlLnByb3RvdHlwZS5tYXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29tcGFyZVRvKHQpPjA/dGhpczp0fSxlLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7dmFyIHI9aSgpO3JldHVybiB0aGlzLmJpdHdpc2VUbyh0LHYscikscn0sZS5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7dmFyIHI9aSgpO3JldHVybiB0aGlzLmJpdHdpc2VUbyh0LHkscikscn0sZS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3ZhciByPWkoKTtyZXR1cm4gdGhpcy5iaXR3aXNlVG8odCxtLHIpLHJ9LGUucHJvdG90eXBlLmFuZE5vdD1mdW5jdGlvbih0KXt2YXIgcj1pKCk7cmV0dXJuIHRoaXMuYml0d2lzZVRvKHQsZyxyKSxyfSxlLnByb3RvdHlwZS5ub3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9aSgpLHI9MDtyPHRoaXMudDsrK3IpdFtyXT10aGlzLkRNJn50aGlzW3JdO3JldHVybiB0LnQ9dGhpcy50LHQucz1+dGhpcy5zLHR9LGUucHJvdG90eXBlLnNoaWZ0TGVmdD1mdW5jdGlvbih0KXt2YXIgcj1pKCk7cmV0dXJuIHQ8MD90aGlzLnJTaGlmdFRvKC10LHIpOnRoaXMubFNoaWZ0VG8odCxyKSxyfSxlLnByb3RvdHlwZS5zaGlmdFJpZ2h0PWZ1bmN0aW9uKHQpe3ZhciByPWkoKTtyZXR1cm4gdDwwP3RoaXMubFNoaWZ0VG8oLXQscik6dGhpcy5yU2hpZnRUbyh0LHIpLHJ9LGUucHJvdG90eXBlLmdldExvd2VzdFNldEJpdD1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy50OysrdClpZigwIT10aGlzW3RdKXJldHVybiB0KnRoaXMuREIrdyh0aGlzW3RdKTtyZXR1cm4gdGhpcy5zPDA/dGhpcy50KnRoaXMuREI6LTF9LGUucHJvdG90eXBlLmJpdENvdW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAscj10aGlzLnMmdGhpcy5ETSxlPTA7ZTx0aGlzLnQ7KytlKXQrPVQodGhpc1tlXV5yKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUudGVzdEJpdD1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLmZsb29yKHQvdGhpcy5EQik7cmV0dXJuIHI+PXRoaXMudD8wIT10aGlzLnM6MCE9KHRoaXNbcl0mMTw8dCV0aGlzLkRCKX0sZS5wcm90b3R5cGUuc2V0Qml0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNoYW5nZUJpdCh0LHkpfSxlLnByb3RvdHlwZS5jbGVhckJpdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQodCxnKX0sZS5wcm90b3R5cGUuZmxpcEJpdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQodCxtKX0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciByPWkoKTtyZXR1cm4gdGhpcy5hZGRUbyh0LHIpLHJ9LGUucHJvdG90eXBlLnN1YnRyYWN0PWZ1bmN0aW9uKHQpe3ZhciByPWkoKTtyZXR1cm4gdGhpcy5zdWJUbyh0LHIpLHJ9LGUucHJvdG90eXBlLm11bHRpcGx5PWZ1bmN0aW9uKHQpe3ZhciByPWkoKTtyZXR1cm4gdGhpcy5tdWx0aXBseVRvKHQscikscn0sZS5wcm90b3R5cGUuZGl2aWRlPWZ1bmN0aW9uKHQpe3ZhciByPWkoKTtyZXR1cm4gdGhpcy5kaXZSZW1Ubyh0LHIsbnVsbCkscn0sZS5wcm90b3R5cGUucmVtYWluZGVyPWZ1bmN0aW9uKHQpe3ZhciByPWkoKTtyZXR1cm4gdGhpcy5kaXZSZW1Ubyh0LG51bGwscikscn0sZS5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyPWZ1bmN0aW9uKHQpe3ZhciByPWkoKSxlPWkoKTtyZXR1cm4gdGhpcy5kaXZSZW1Ubyh0LHIsZSksbmV3IEFycmF5KHIsZSl9LGUucHJvdG90eXBlLm1vZFBvdz1mdW5jdGlvbih0LHIpe3ZhciBlLG4sbz10LmJpdExlbmd0aCgpLHM9YygxKTtpZihvPD0wKXJldHVybiBzO2U9bzwxOD8xOm88NDg/MzpvPDE0ND80Om88NzY4PzU6NixuPW88OD9uZXcgbChyKTpyLmlzRXZlbigpP25ldyBCKHIpOm5ldyBkKHIpO3ZhciBoPW5ldyBBcnJheSxhPTMsdT1lLTEsZj0oMTw8ZSktMTtpZihoWzFdPW4uY29udmVydCh0aGlzKSxlPjEpe3ZhciB2PWkoKTtmb3Iobi5zcXJUbyhoWzFdLHYpO2E8PWY7KWhbYV09aSgpLG4ubXVsVG8odixoW2EtMl0saFthXSksYSs9Mn12YXIgeSxtLGc9dC50LTEsdz0hMCxUPWkoKTtmb3Iobz1wKHRbZ10pLTE7Zz49MDspe2ZvcihvPj11P3k9dFtnXT4+by11JmY6KHk9KHRbZ10mKDE8PG8rMSktMSk8PHUtbyxnPjAmJih5fD10W2ctMV0+PnRoaXMuREIrby11KSksYT1lOzA9PSgxJnkpOyl5Pj49MSwtLWE7aWYoKG8tPWEpPDAmJihvKz10aGlzLkRCLC0tZyksdyloW3ldLmNvcHlUbyhzKSx3PSExO2Vsc2V7Zm9yKDthPjE7KW4uc3FyVG8ocyxUKSxuLnNxclRvKFQscyksYS09MjthPjA/bi5zcXJUbyhzLFQpOihtPXMscz1ULFQ9bSksbi5tdWxUbyhULGhbeV0scyl9Zm9yKDtnPj0wJiYwPT0odFtnXSYxPDxvKTspbi5zcXJUbyhzLFQpLG09cyxzPVQsVD1tLC0tbzwwJiYobz10aGlzLkRCLTEsLS1nKX1yZXR1cm4gbi5yZXZlcnQocyl9LGUucHJvdG90eXBlLm1vZEludmVyc2U9ZnVuY3Rpb24odCl7dmFyIHI9dC5pc0V2ZW4oKTtpZih0aGlzLmlzRXZlbigpJiZyfHwwPT10LnNpZ251bSgpKXJldHVybiBlLlpFUk87Zm9yKHZhciBpPXQuY2xvbmUoKSxuPXRoaXMuY2xvbmUoKSxvPWMoMSkscz1jKDApLGg9YygwKSxhPWMoMSk7MCE9aS5zaWdudW0oKTspe2Zvcig7aS5pc0V2ZW4oKTspaS5yU2hpZnRUbygxLGkpLHI/KG8uaXNFdmVuKCkmJnMuaXNFdmVuKCl8fChvLmFkZFRvKHRoaXMsbykscy5zdWJUbyh0LHMpKSxvLnJTaGlmdFRvKDEsbykpOnMuaXNFdmVuKCl8fHMuc3ViVG8odCxzKSxzLnJTaGlmdFRvKDEscyk7Zm9yKDtuLmlzRXZlbigpOyluLnJTaGlmdFRvKDEsbikscj8oaC5pc0V2ZW4oKSYmYS5pc0V2ZW4oKXx8KGguYWRkVG8odGhpcyxoKSxhLnN1YlRvKHQsYSkpLGguclNoaWZ0VG8oMSxoKSk6YS5pc0V2ZW4oKXx8YS5zdWJUbyh0LGEpLGEuclNoaWZ0VG8oMSxhKTtpLmNvbXBhcmVUbyhuKT49MD8oaS5zdWJUbyhuLGkpLHImJm8uc3ViVG8oaCxvKSxzLnN1YlRvKGEscykpOihuLnN1YlRvKGksbiksciYmaC5zdWJUbyhvLGgpLGEuc3ViVG8ocyxhKSl9cmV0dXJuIDAhPW4uY29tcGFyZVRvKGUuT05FKT9lLlpFUk86YS5jb21wYXJlVG8odCk+PTA/YS5zdWJ0cmFjdCh0KTphLnNpZ251bSgpPDA/KGEuYWRkVG8odCxhKSxhLnNpZ251bSgpPDA/YS5hZGQodCk6YSk6YX0sZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmV4cCh0LG5ldyBiKX0sZS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuczwwP3RoaXMubmVnYXRlKCk6dGhpcy5jbG9uZSgpLGU9dC5zPDA/dC5uZWdhdGUoKTp0LmNsb25lKCk7aWYoci5jb21wYXJlVG8oZSk8MCl7dmFyIGk9cjtyPWUsZT1pfXZhciBuPXIuZ2V0TG93ZXN0U2V0Qml0KCksbz1lLmdldExvd2VzdFNldEJpdCgpO2lmKG88MClyZXR1cm4gcjtmb3IobjxvJiYobz1uKSxvPjAmJihyLnJTaGlmdFRvKG8sciksZS5yU2hpZnRUbyhvLGUpKTtyLnNpZ251bSgpPjA7KShuPXIuZ2V0TG93ZXN0U2V0Qml0KCkpPjAmJnIuclNoaWZ0VG8obixyKSwobj1lLmdldExvd2VzdFNldEJpdCgpKT4wJiZlLnJTaGlmdFRvKG4sZSksci5jb21wYXJlVG8oZSk+PTA/KHIuc3ViVG8oZSxyKSxyLnJTaGlmdFRvKDEscikpOihlLnN1YlRvKHIsZSksZS5yU2hpZnRUbygxLGUpKTtyZXR1cm4gbz4wJiZlLmxTaGlmdFRvKG8sZSksZX0sZS5wcm90b3R5cGUuaXNQcm9iYWJsZVByaW1lPWZ1bmN0aW9uKHQpe3ZhciByLGU9dGhpcy5hYnMoKTtpZigxPT1lLnQmJmVbMF08PXhbeC5sZW5ndGgtMV0pe2ZvcihyPTA7cjx4Lmxlbmd0aDsrK3IpaWYoZVswXT09eFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1pZihlLmlzRXZlbigpKXJldHVybiExO2ZvcihyPTE7cjx4Lmxlbmd0aDspe2Zvcih2YXIgaT14W3JdLG49cisxO248eC5sZW5ndGgmJmk8RTspaSo9eFtuKytdO2ZvcihpPWUubW9kSW50KGkpO3I8bjspaWYoaSV4W3IrK109PTApcmV0dXJuITF9cmV0dXJuIGUubWlsbGVyUmFiaW4odCl9LGUucHJvdG90eXBlLnNxdWFyZT1mdW5jdGlvbigpe3ZhciB0PWkoKTtyZXR1cm4gdGhpcy5zcXVhcmVUbyh0KSx0fSxlLnByb3RvdHlwZS5CYXJyZXR0PUIsbnVsbD09QSl7dmFyIE07aWYoQT1uZXcgQXJyYXksXz0wLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuY3J5cHRvKWlmKHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgQz1uZXcgVWludDhBcnJheSgzMik7Zm9yKHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKEMpLE09MDtNPDMyOysrTSlBW18rK109Q1tNXX1lbHNlIGlmKCJOZXRzY2FwZSI9PW5hdmlnYXRvci5hcHBOYW1lJiZuYXZpZ2F0b3IuYXBwVmVyc2lvbjwiNSIpe3ZhciBrPXdpbmRvdy5jcnlwdG8ucmFuZG9tKDMyKTtmb3IoTT0wO008ay5sZW5ndGg7KytNKUFbXysrXT0yNTUmay5jaGFyQ29kZUF0KE0pfWZvcig7XzxOOylNPU1hdGguZmxvb3IoNjU1MzYqTWF0aC5yYW5kb20oKSksQVtfKytdPU0+Pj44LEFbXysrXT0yNTUmTTtfPTAsUigpfWZ1bmN0aW9uIGooKXtpZihudWxsPT1EKXtmb3IoUigpLChEPW5ldyBJKS5pbml0KEEpLF89MDtfPEEubGVuZ3RoOysrXylBW19dPTA7Xz0wfXJldHVybiBELm5leHQoKX1mdW5jdGlvbiBPKCl7fWZ1bmN0aW9uIEkoKXt0aGlzLmk9MCx0aGlzLmo9MCx0aGlzLlM9bmV3IEFycmF5fU8ucHJvdG90eXBlLm5leHRCeXRlcz1mdW5jdGlvbih0KXt2YXIgcjtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXRbcl09aigpfSxJLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKHQpe3ZhciByLGUsaTtmb3Iocj0wO3I8MjU2Oysrcil0aGlzLlNbcl09cjtmb3IoZT0wLHI9MDtyPDI1NjsrK3IpaT10aGlzLlNbcl0sdGhpcy5TW3JdPXRoaXMuU1tlPWUrdGhpcy5TW3JdK3RbciV0Lmxlbmd0aF0mMjU1XSx0aGlzLlNbZV09aTt0aGlzLmk9MCx0aGlzLmo9MH0sSS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmk9dGhpcy5pKzEmMjU1LHRoaXMuaj10aGlzLmordGhpcy5TW3RoaXMuaV0mMjU1LHQ9dGhpcy5TW3RoaXMuaV0sdGhpcy5TW3RoaXMuaV09dGhpcy5TW3RoaXMual0sdGhpcy5TW3RoaXMual09dCx0aGlzLlNbdCt0aGlzLlNbdGhpcy5pXSYyNTVdfTt2YXIgTj0yNTY7ZS5TZWN1cmVSYW5kb209TyxlLkJpZ0ludGVnZXI9ZSxyLmV4cG9ydHM9ZX0pLmNhbGwodCl9KSxoPXtzaGExOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQiLHNoYTIyNDoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMiLHNoYTI1NjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAiLHNoYTM4NDoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAiLHNoYTUxMjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAiLG1kMjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwMjA1MDAwNDEwIixtZDU6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCIscmlwZW1kMTYwOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSxhPXtzaGEyNTY6aSQxfTtmdW5jdGlvbiB1KHQscil7aWYodGhpcy5uPW51bGwsdGhpcy5lPTAsIShudWxsIT10JiZudWxsIT1yJiZ0Lmxlbmd0aD4wJiZyLmxlbmd0aD4wKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5IGRhdGEiKTt0aGlzLm49bmV3IHModCwxNiksdGhpcy5lPXBhcnNlSW50KHIsMTYpfXUucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LHIpe3I9ci5yZXBsYWNlKC9bXjAtOWEtZl18W1xzXG5dXS9naSwiIik7dmFyIGU9bmV3IHMociwxNik7aWYoZS5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpdGhyb3cgbmV3IEVycm9yKCJTaWduYXR1cmUgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUga2V5IG1vZHVsdXMuIik7dmFyIGk9ZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIGgpe3ZhciBlPWhbcl0saT1lLmxlbmd0aDtpZih0LnN1YnN0cmluZygwLGkpPT09ZSlyZXR1cm57YWxnOnIsaGFzaDp0LnN1YnN0cmluZyhpKX19cmV0dXJuW119KGUubW9kUG93SW50KHRoaXMuZSx0aGlzLm4pLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eMWYrMDAvLCIiKSk7aWYoMD09PWkubGVuZ3RoKXJldHVybiExO2lmKCFhLmhhc093blByb3BlcnR5KGkuYWxnKSl0aHJvdyBuZXcgRXJyb3IoIkhhc2hpbmcgYWxnb3JpdGhtIGlzIG5vdCBzdXBwb3J0ZWQuIik7dmFyIG49YVtpLmFsZ10odCkudG9TdHJpbmcoKTtyZXR1cm4gaS5oYXNoPT09bn07Zm9yKHZhciBsPVtdLGQ9W10sdj0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSx5PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixtPTAsZz15Lmxlbmd0aDttPGc7KyttKWxbbV09eVttXSxkW3kuY2hhckNvZGVBdChtKV09bTtmdW5jdGlvbiB3KHQpe3ZhciByPXQubGVuZ3RoO2lmKHIlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3JldHVybiI9Ij09PXRbci0yXT8yOiI9Ij09PXRbci0xXT8xOjB9ZnVuY3Rpb24gVCh0LHIsZSl7Zm9yKHZhciBpLG49W10sbz1yO288ZTtvKz0zKW4ucHVzaChsWyhpPSh0W29dPDwxNikrKHRbbysxXTw8OCkrdFtvKzJdKT4+MTgmNjNdK2xbaT4+MTImNjNdK2xbaT4+NiY2M10rbFs2MyZpXSk7cmV0dXJuIG4uam9pbigiIil9ZFsiLSIuY2hhckNvZGVBdCgwKV09NjIsZFsiXyIuY2hhckNvZGVBdCgwKV09NjM7dmFyIGI9e2J5dGVMZW5ndGg6ZnVuY3Rpb24odCl7cmV0dXJuIDMqdC5sZW5ndGgvNC13KHQpfSx0b0J5dGVBcnJheTpmdW5jdGlvbih0KXt2YXIgcixlLGksbixvLHMsaD10Lmxlbmd0aDtvPXcodCkscz1uZXcgdigzKmgvNC1vKSxpPW8+MD9oLTQ6aDt2YXIgYT0wO2ZvcihyPTAsZT0wO3I8aTtyKz00LGUrPTMpbj1kW3QuY2hhckNvZGVBdChyKV08PDE4fGRbdC5jaGFyQ29kZUF0KHIrMSldPDwxMnxkW3QuY2hhckNvZGVBdChyKzIpXTw8NnxkW3QuY2hhckNvZGVBdChyKzMpXSxzW2ErK109bj4+MTYmMjU1LHNbYSsrXT1uPj44JjI1NSxzW2ErK109MjU1Jm47cmV0dXJuIDI9PT1vPyhuPWRbdC5jaGFyQ29kZUF0KHIpXTw8MnxkW3QuY2hhckNvZGVBdChyKzEpXT4+NCxzW2ErK109MjU1Jm4pOjE9PT1vJiYobj1kW3QuY2hhckNvZGVBdChyKV08PDEwfGRbdC5jaGFyQ29kZUF0KHIrMSldPDw0fGRbdC5jaGFyQ29kZUF0KHIrMildPj4yLHNbYSsrXT1uPj44JjI1NSxzW2ErK109MjU1Jm4pLHN9LGZyb21CeXRlQXJyYXk6ZnVuY3Rpb24odCl7Zm9yKHZhciByLGU9dC5sZW5ndGgsaT1lJTMsbj0iIixvPVtdLHM9MCxoPWUtaTtzPGg7cys9MTYzODMpby5wdXNoKFQodCxzLHMrMTYzODM+aD9oOnMrMTYzODMpKTtyZXR1cm4gMT09PWk/KG4rPWxbKHI9dFtlLTFdKT4+Ml0sbis9bFtyPDw0JjYzXSxuKz0iPT0iKToyPT09aSYmKG4rPWxbKHI9KHRbZS0yXTw8OCkrdFtlLTFdKT4+MTBdLG4rPWxbcj4+NCY2M10sbis9bFtyPDwyJjYzXSxuKz0iPSIpLG8ucHVzaChuKSxvLmpvaW4oIiIpfX07ZnVuY3Rpb24gUyh0KXt2YXIgcj10Lmxlbmd0aCU0O3JldHVybiAwPT09cj90OnQrbmV3IEFycmF5KDQtcisxKS5qb2luKCI9Iil9ZnVuY3Rpb24gQih0KXtyZXR1cm4gdD1TKHQpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKSxkZWNvZGVVUklDb21wb25lbnQoZnVuY3Rpb24odCl7Zm9yKHZhciByPSIiLGU9MDtlPHQubGVuZ3RoO2UrKylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbZV0pO3JldHVybiByfShiLnRvQnl0ZUFycmF5KHQpKS5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIlIisoIjAwIit0LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9KS5qb2luKCIiKSl9ZnVuY3Rpb24gRCh0KXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciByPSIiLGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGk9dFtlXS50b1N0cmluZygxNik7cis9Mj09PWkubGVuZ3RoP2k6IjAiK2l9cmV0dXJuIHJ9KGIudG9CeXRlQXJyYXkoUyh0KSkpfXZhciBBPXIoZnVuY3Rpb24ocil7dmFyIGU7ZT10LHIuZXhwb3J0cz9yLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7Im9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbMF0mJih0PWFyZ3VtZW50c1swXSk7dmFyIHI9W10uc2xpY2UuY2FsbCh0LDApLmpvaW4oIi8iKTtyZXR1cm4gci5yZXBsYWNlKC86XC8vZywiOi8vIikucmVwbGFjZSgvKFteOlxzXSlcLysvZywiJDEvIikucmVwbGFjZSgvXC8oXD98JnwjW14hXSkvZywiJDEiKS5yZXBsYWNlKC8oXD8uKylcPy9nLCIkMSYiKX06ZS51cmxqb2luPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzOyJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzWzBdJiYodD1hcmd1bWVudHNbMF0pO3ZhciByPVtdLnNsaWNlLmNhbGwodCwwKS5qb2luKCIvIik7cmV0dXJuIHIucmVwbGFjZSgvOlwvL2csIjovLyIpLnJlcGxhY2UoLyhbXjpcc10pXC8rL2csIiQxLyIpLnJlcGxhY2UoL1wvKFw/fCZ8I1teIV0pL2csIiQxIikucmVwbGFjZSgvKFw/LispXD8vZywiJDEmIil9fSk7dmFyIHg9c2V0VGltZW91dDtmdW5jdGlvbiBFKHQpe3JldHVybiBCb29sZWFuKHQmJnZvaWQgMCE9PXQubGVuZ3RoKX1mdW5jdGlvbiBSKCl7fWZ1bmN0aW9uIE0odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Iik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigibm90IGEgZnVuY3Rpb24iKTt0aGlzLl9zdGF0ZT0wLHRoaXMuX2hhbmRsZWQ9ITEsdGhpcy5fdmFsdWU9dm9pZCAwLHRoaXMuX2RlZmVycmVkcz1bXSxOKHQsdGhpcyl9ZnVuY3Rpb24gQyh0LHIpe2Zvcig7Mz09PXQuX3N0YXRlOyl0PXQuX3ZhbHVlOzAhPT10Ll9zdGF0ZT8odC5faGFuZGxlZD0hMCxNLl9pbW1lZGlhdGVGbihmdW5jdGlvbigpe3ZhciBlPTE9PT10Ll9zdGF0ZT9yLm9uRnVsZmlsbGVkOnIub25SZWplY3RlZDtpZihudWxsIT09ZSl7dmFyIGk7dHJ5e2k9ZSh0Ll92YWx1ZSl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgaihyLnByb21pc2UsdCl9ayhyLnByb21pc2UsaSl9ZWxzZSgxPT09dC5fc3RhdGU/azpqKShyLnByb21pc2UsdC5fdmFsdWUpfSkpOnQuX2RlZmVycmVkcy5wdXNoKHIpfWZ1bmN0aW9uIGsodCxyKXt0cnl7aWYocj09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQSBwcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0c2VsZi4iKTtpZihyJiYoIm9iamVjdCI9PXR5cGVvZiByfHwiZnVuY3Rpb24iPT10eXBlb2Ygcikpe3ZhciBlPXIudGhlbjtpZihyIGluc3RhbmNlb2YgTSlyZXR1cm4gdC5fc3RhdGU9Myx0Ll92YWx1ZT1yLHZvaWQgTyh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSlyZXR1cm4gdm9pZCBOKChpPWUsbj1yLGZ1bmN0aW9uKCl7aS5hcHBseShuLGFyZ3VtZW50cyl9KSx0KX10Ll9zdGF0ZT0xLHQuX3ZhbHVlPXIsTyh0KX1jYXRjaChyKXtqKHQscil9dmFyIGksbn1mdW5jdGlvbiBqKHQscil7dC5fc3RhdGU9Mix0Ll92YWx1ZT1yLE8odCl9ZnVuY3Rpb24gTyh0KXsyPT09dC5fc3RhdGUmJjA9PT10Ll9kZWZlcnJlZHMubGVuZ3RoJiZNLl9pbW1lZGlhdGVGbihmdW5jdGlvbigpe3QuX2hhbmRsZWR8fE0uX3VuaGFuZGxlZFJlamVjdGlvbkZuKHQuX3ZhbHVlKX0pO2Zvcih2YXIgcj0wLGU9dC5fZGVmZXJyZWRzLmxlbmd0aDtyPGU7cisrKUModCx0Ll9kZWZlcnJlZHNbcl0pO3QuX2RlZmVycmVkcz1udWxsfWZ1bmN0aW9uIEkodCxyLGUpe3RoaXMub25GdWxmaWxsZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpudWxsLHRoaXMub25SZWplY3RlZD0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOm51bGwsdGhpcy5wcm9taXNlPWV9ZnVuY3Rpb24gTih0LHIpe3ZhciBlPSExO3RyeXt0KGZ1bmN0aW9uKHQpe2V8fChlPSEwLGsocix0KSl9LGZ1bmN0aW9uKHQpe2V8fChlPSEwLGoocix0KSl9KX1jYXRjaCh0KXtpZihlKXJldHVybjtlPSEwLGoocix0KX19ZnVuY3Rpb24gVih0KXtpZih0Lm9rKXJldHVybiB0Lmpzb24oKTt2YXIgcj1uZXcgRXJyb3IodC5zdGF0dXNUZXh0KTtyZXR1cm4gci5yZXNwb25zZT10LE0ucmVqZWN0KHIpfWZ1bmN0aW9uIEwodCxyKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBmZXRjaD9mdW5jdGlvbih0LHIpe3JldHVybiByPXJ8fHt9LG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsaSl7dmFyIG49bmV3IFhNTEh0dHBSZXF1ZXN0LG89W10scz1bXSxoPXt9LGE9ZnVuY3Rpb24oKXtyZXR1cm57b2s6Mj09KG4uc3RhdHVzLzEwMHwwKSxzdGF0dXNUZXh0Om4uc3RhdHVzVGV4dCxzdGF0dXM6bi5zdGF0dXMsdXJsOm4ucmVzcG9uc2VVUkwsdGV4dDpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUobi5yZXNwb25zZVRleHQpfSxqc29uOmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShKU09OLnBhcnNlKG4ucmVzcG9uc2VUZXh0KSl9LGJsb2I6ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFtuLnJlc3BvbnNlXSkpfSxjbG9uZTphLGhlYWRlcnM6e2tleXM6ZnVuY3Rpb24oKXtyZXR1cm4gb30sZW50cmllczpmdW5jdGlvbigpe3JldHVybiBzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGhbdC50b0xvd2VyQ2FzZSgpXX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKClpbiBofX19fTtmb3IodmFyIHUgaW4gbi5vcGVuKHIubWV0aG9kfHwiZ2V0Iix0LCEwKSxuLm9ubG9hZD1mdW5jdGlvbigpe24uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkucmVwbGFjZSgvXiguKj8pOlteXFNcbl0qKFtcc1xTXSo/KSQvZ20sZnVuY3Rpb24odCxyLGUpe28ucHVzaChyPXIudG9Mb3dlckNhc2UoKSkscy5wdXNoKFtyLGVdKSxoW3JdPWhbcl0/aFtyXSsiLCIrZTplfSksZShhKCkpfSxuLm9uZXJyb3I9aSxuLndpdGhDcmVkZW50aWFscz0iaW5jbHVkZSI9PXIuY3JlZGVudGlhbHMsci5oZWFkZXJzKW4uc2V0UmVxdWVzdEhlYWRlcih1LHIuaGVhZGVyc1t1XSk7bi5zZW5kKHIuYm9keXx8bnVsbCl9KX06ZmV0Y2gpKHQuandrc1VSSXx8QSh0LmlzcywiLndlbGwta25vd24iLCJqd2tzLmpzb24iKSkudGhlbihWKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciBpLG4sbyxzPW51bGw7Zm9yKGk9MDtpPGUua2V5cy5sZW5ndGgmJm51bGw9PT1zO2krKykobj1lLmtleXNbaV0pLmtpZD09PXQua2lkJiYocz1uKTtyZXR1cm4gcihudWxsLHttb2R1bHVzOkQoKG89cykubiksZXhwOkQoby5lKX0pfSkuY2F0Y2goZnVuY3Rpb24odCl7cih0KX0pfWZ1bmN0aW9uIFAodCl7dGhpcy5uYW1lPSJDb25maWd1cmF0aW9uRXJyb3IiLHRoaXMubWVzc2FnZT10fHwiIn1mdW5jdGlvbiBxKHQpe3RoaXMubmFtZT0iVG9rZW5WYWxpZGF0aW9uRXJyb3IiLHRoaXMubWVzc2FnZT10fHwiIn1NLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKG51bGwsdCl9LE0ucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24odCxyKXt2YXIgZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihSKTtyZXR1cm4gQyh0aGlzLG5ldyBJKHQscixlKSksZX0sTS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLmNvbnN0cnVjdG9yO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZX0pfSxmdW5jdGlvbihlKXtyZXR1cm4gci5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiByLnJlamVjdChlKX0pfSl9LE0uYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTShmdW5jdGlvbihyLGUpe2lmKCFFKHQpKXJldHVybiBlKG5ldyBUeXBlRXJyb3IoIlByb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXkiKSk7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCk7aWYoMD09PWkubGVuZ3RoKXJldHVybiByKFtdKTt2YXIgbj1pLmxlbmd0aDtmdW5jdGlvbiBvKHQscyl7dHJ5e2lmKHMmJigib2JqZWN0Ij09dHlwZW9mIHN8fCJmdW5jdGlvbiI9PXR5cGVvZiBzKSl7dmFyIGg9cy50aGVuO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBoKXJldHVybiB2b2lkIGguY2FsbChzLGZ1bmN0aW9uKHIpe28odCxyKX0sZSl9aVt0XT1zLDA9PS0tbiYmcihpKX1jYXRjaCh0KXtlKHQpfX1mb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKylvKHMsaVtzXSl9KX0sTS5yZXNvbHZlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I9PT1NP3Q6bmV3IE0oZnVuY3Rpb24ocil7cih0KX0pfSxNLnJlamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE0oZnVuY3Rpb24ocixlKXtlKHQpfSl9LE0ucmFjZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE0oZnVuY3Rpb24ocixlKXtpZighRSh0KSlyZXR1cm4gZShuZXcgVHlwZUVycm9yKCJQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheSIpKTtmb3IodmFyIGk9MCxuPXQubGVuZ3RoO2k8bjtpKyspTS5yZXNvbHZlKHRbaV0pLnRoZW4ocixlKX0pfSxNLl9pbW1lZGlhdGVGbj0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0SW1tZWRpYXRlJiZmdW5jdGlvbih0KXtzZXRJbW1lZGlhdGUodCl9fHxmdW5jdGlvbih0KXt4KHQsMCl9LE0uX3VuaGFuZGxlZFJlamVjdGlvbkZuPWZ1bmN0aW9uKHQpeyJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZSYmY29uc29sZS53YXJuKCJQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246Iix0KX0sUC5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlLHEucHJvdG90eXBlPUVycm9yLnByb3RvdHlwZTt2YXIgVT1mdW5jdGlvbigpe307VS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LFUucHJvdG90eXBlLmhhcz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxVLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07dmFyIEg9WyJSUzI1NiJdO2Z1bmN0aW9uIEYodCl7dmFyIHI9dHx8e307aWYodGhpcy5qd2tzQ2FjaGU9ci5qd2tzQ2FjaGV8fG5ldyBVLHRoaXMuZXhwZWN0ZWRBbGc9ci5leHBlY3RlZEFsZ3x8IlJTMjU2Iix0aGlzLmlzc3Vlcj1yLmlzc3Vlcix0aGlzLmF1ZGllbmNlPXIuYXVkaWVuY2UsdGhpcy5sZWV3YXk9ci5sZWV3YXl8fDAsdGhpcy5fX2Rpc2FibGVFeHBpcmF0aW9uQ2hlY2s9ci5fX2Rpc2FibGVFeHBpcmF0aW9uQ2hlY2t8fCExLHRoaXMuandrc1VSST1yLmp3a3NVUkksdGhpcy5sZWV3YXk8MHx8dGhpcy5sZWV3YXk+MzAwKXRocm93IG5ldyBQKCJUaGUgbGVld2F5IHNob3VsZCBiZSBwb3NpdGl2ZSBhbmQgbG93ZXIgdGhhbiBmaXZlIG1pbnV0ZXMuIik7aWYoLTE9PT1ILmluZGV4T2YodGhpcy5leHBlY3RlZEFsZykpdGhyb3cgbmV3IFAoIkFsZ29yaXRobSAiK3RoaXMuZXhwZWN0ZWRBbGcrIiBpcyBub3Qgc3VwcG9ydGVkLiAoRXhwZWN0ZWQgYWxnczogWyIrSC5qb2luKCIsIikrIl0pIil9ZnVuY3Rpb24gUGx1Z2luSGFuZGxlcih3ZWJBdXRoLHBsdWdpbnMpe3RoaXMucGx1Z2lucz1wbHVnaW5zO2Zvcih2YXIgYT0wO2E8dGhpcy5wbHVnaW5zLmxlbmd0aDthKyspe2lmKHRoaXMucGx1Z2luc1thXS52ZXJzaW9uIT09dmVyc2lvbi5yYXcpe3ZhciBwbHVnaW5OYW1lPSIiO3Rocm93IHRoaXMucGx1Z2luc1thXS5jb25zdHJ1Y3RvciYmdGhpcy5wbHVnaW5zW2FdLmNvbnN0cnVjdG9yLm5hbWUmJihwbHVnaW5OYW1lPXRoaXMucGx1Z2luc1thXS5jb25zdHJ1Y3Rvci5uYW1lKSxuZXcgRXJyb3IoIlBsdWdpbiAiK3BsdWdpbk5hbWUrIiB2ZXJzaW9uICgiK3RoaXMucGx1Z2luc1thXS52ZXJzaW9uKyIpIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIFNESyB2ZXJzaW9uICgiK3ZlcnNpb24ucmF3KyIpIil9dGhpcy5wbHVnaW5zW2FdLnNldFdlYkF1dGgod2ViQXV0aCl9fUYucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LHIsZSl7dmFyIGk9dGhpcy5kZWNvZGUodCk7aWYoaSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBlKGksITEpO3ZhciBuPWkuZW5jb2RlZC5oZWFkZXIrIi4iK2kuZW5jb2RlZC5wYXlsb2FkLG89RChpLmVuY29kZWQuc2lnbmF0dXJlKSxzPWkuaGVhZGVyLmFsZyxoPWkuaGVhZGVyLmtpZCxhPWkucGF5bG9hZC5hdWQsdT1pLnBheWxvYWQuaXNzLGY9aS5wYXlsb2FkLmV4cCxjPWkucGF5bG9hZC5uYmYscD1pLnBheWxvYWQubm9uY2V8fG51bGwsbD10aGlzO2lmKGwuZXhwZWN0ZWRBbGchPT1zKXJldHVybiBlKG5ldyBxKCJBbGdvcml0aG0gIitzKyIgaXMgbm90IHN1cHBvcnRlZC4gKEV4cGVjdGVkIGFsZ3M6IFsiK0guam9pbigiLCIpKyJdKSIpLCExKTt0aGlzLmdldFJzYVZlcmlmaWVyKHUsaCxmdW5jdGlvbih0LHMpe2lmKHQpcmV0dXJuIGUodCk7aWYocy52ZXJpZnkobixvKSl7aWYobC5pc3N1ZXIhPT11KXJldHVybiBlKG5ldyBxKCJJc3N1ZXIgIit1KyIgaXMgbm90IHZhbGlkLiIpLCExKTtpZihsLmF1ZGllbmNlIT09YSlyZXR1cm4gZShuZXcgcSgiQXVkaWVuY2UgIithKyIgaXMgbm90IHZhbGlkLiIpLCExKTtpZihwIT09cilyZXR1cm4gZShuZXcgcSgiTm9uY2UgZG9lcyBub3QgbWF0Y2guIiksITEpO3ZhciBoPWwudmVyaWZ5RXhwQW5kTmJmKGYsYyk7cmV0dXJuIGg/ZShoLCExKTplKG51bGwsaS5wYXlsb2FkKX1yZXR1cm4gZShuZXcgcSgiSW52YWxpZCBzaWduYXR1cmUuIikpfSl9LEYucHJvdG90eXBlLnZlcmlmeUV4cEFuZE5iZj1mdW5jdGlvbih0LHIpe3ZhciBlPW5ldyBEYXRlLGk9bmV3IERhdGUoMCksbj1uZXcgRGF0ZSgwKTtyZXR1cm4gdGhpcy5fX2Rpc2FibGVFeHBpcmF0aW9uQ2hlY2s/bnVsbDooaS5zZXRVVENTZWNvbmRzKHQrdGhpcy5sZWV3YXkpLGU+aT9uZXcgcSgiRXhwaXJlZCB0b2tlbi4iKTp2b2lkIDA9PT1yP251bGw6KG4uc2V0VVRDU2Vjb25kcyhyLXRoaXMubGVld2F5KSxlPG4/bmV3IHEoIlRoZSB0b2tlbiBpcyBub3QgdmFsaWQgdW50aWwgbGF0ZXIgaW4gdGhlIGZ1dHVyZS4gUGxlYXNlIGNoZWNrIHlvdXIgY29tcHV0ZWQgY2xvY2suIik6bnVsbCkpfSxGLnByb3RvdHlwZS52ZXJpZnlFeHBBbmRJYXQ9ZnVuY3Rpb24odCxyKXt2YXIgZT1uZXcgRGF0ZSxpPW5ldyBEYXRlKDApLG49bmV3IERhdGUoMCk7cmV0dXJuIHRoaXMuX19kaXNhYmxlRXhwaXJhdGlvbkNoZWNrP251bGw6KGkuc2V0VVRDU2Vjb25kcyh0K3RoaXMubGVld2F5KSxlPmk/bmV3IHEoIkV4cGlyZWQgdG9rZW4uIik6KG4uc2V0VVRDU2Vjb25kcyhyLXRoaXMubGVld2F5KSxlPG4/bmV3IHEoIlRoZSB0b2tlbiB3YXMgaXNzdWVkIGluIHRoZSBmdXR1cmUuIFBsZWFzZSBjaGVjayB5b3VyIGNvbXB1dGVkIGNsb2NrLiIpOm51bGwpKX0sRi5wcm90b3R5cGUuZ2V0UnNhVmVyaWZpZXI9ZnVuY3Rpb24odCxyLGUpe3ZhciBpPXRoaXMsbj10K3I7aWYodGhpcy5qd2tzQ2FjaGUuaGFzKG4pKXt2YXIgbz10aGlzLmp3a3NDYWNoZS5nZXQobik7ZShudWxsLG5ldyB1KG8ubW9kdWx1cyxvLmV4cCkpfWVsc2UgTCh7andrc1VSSTp0aGlzLmp3a3NVUkksaXNzOnQsa2lkOnJ9LGZ1bmN0aW9uKHQscil7cmV0dXJuIHQ/ZSh0KTooaS5qd2tzQ2FjaGUuc2V0KG4sciksZShudWxsLG5ldyB1KHIubW9kdWx1cyxyLmV4cCkpKX0pfSxGLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCl7dmFyIHIsZSxpPXQuc3BsaXQoIi4iKTtpZigzIT09aS5sZW5ndGgpcmV0dXJuIG5ldyBxKCJDYW5ub3QgZGVjb2RlIGEgbWFsZm9ybWVkIEpXVCIpO3RyeXtyPUpTT04ucGFyc2UoQihpWzBdKSksZT1KU09OLnBhcnNlKEIoaVsxXSkpfWNhdGNoKHQpe3JldHVybiBuZXcgcSgiVG9rZW4gaGVhZGVyIG9yIHBheWxvYWQgaXMgbm90IHZhbGlkIEpTT04iKX1yZXR1cm57aGVhZGVyOnIscGF5bG9hZDplLGVuY29kZWQ6e2hlYWRlcjppWzBdLHBheWxvYWQ6aVsxXSxzaWduYXR1cmU6aVsyXX19fSxGLnByb3RvdHlwZS52YWxpZGF0ZUFjY2Vzc1Rva2VuPWZ1bmN0aW9uKHQscixlLHMpe2lmKHRoaXMuZXhwZWN0ZWRBbGchPT1yKXJldHVybiBzKG5ldyBxKCJBbGdvcml0aG0gIityKyIgaXMgbm90IHN1cHBvcnRlZC4gKEV4cGVjdGVkIGFsZzogIit0aGlzLmV4cGVjdGVkQWxnKyIpIikpO3ZhciBoLGE9aSQxKHQpLHU9by5zdHJpbmdpZnkoYSksZj11LnN1YnN0cmluZygwLHUubGVuZ3RoLzIpLGM9by5wYXJzZShmKSxwPW4uc3RyaW5naWZ5KGMpO3JldHVybiBzKChoPXsiKyI6Ii0iLCIvIjoiXyIsIj0iOiIifSxwLnJlcGxhY2UoL1srXC89XS9nLGZ1bmN0aW9uKHQpe3JldHVybiBoW3RdfSkhPT1lP25ldyBxKCJJbnZhbGlkIGFjY2Vzc190b2tlbiIpOm51bGwpKX0sUGx1Z2luSGFuZGxlci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGV4dGVuc2liaWxpdHlQb2ludCl7Zm9yKHZhciBhPTA7YTx0aGlzLnBsdWdpbnMubGVuZ3RoO2ErKylpZih0aGlzLnBsdWdpbnNbYV0uc3VwcG9ydHMoZXh0ZW5zaWJpbGl0eVBvaW50KSlyZXR1cm4gdGhpcy5wbHVnaW5zW2FdLmluaXQoKTtyZXR1cm4gbnVsbH07dmFyIHJhbmRvbT17cmFuZG9tU3RyaW5nOmZ1bmN0aW9uKGxlbmd0aCl7dmFyIGJ5dGVzPW5ldyBVaW50OEFycmF5KGxlbmd0aCkscmVzdWx0PVtdLGNoYXJzZXQ9IjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXotLl9+IixjcnlwdG9PYmo9d2luZG93SGVscGVyLmdldFdpbmRvdygpLmNyeXB0b3x8d2luZG93SGVscGVyLmdldFdpbmRvdygpLm1zQ3J5cHRvO2lmKCFjcnlwdG9PYmopcmV0dXJuIG51bGw7Zm9yKHZhciByYW5kb209Y3J5cHRvT2JqLmdldFJhbmRvbVZhbHVlcyhieXRlcyksYT0wO2E8cmFuZG9tLmxlbmd0aDthKyspcmVzdWx0LnB1c2goY2hhcnNldFtyYW5kb21bYV0lY2hhcnNldC5sZW5ndGhdKTtyZXR1cm4gcmVzdWx0LmpvaW4oIiIpfX0sREVGQVVMVF9OQU1FU1BBQ0U9ImNvbS5hdXRoMC5hdXRoLiI7ZnVuY3Rpb24gVHJhbnNhY3Rpb25NYW5hZ2VyKG9wdGlvbnMpe3ZhciB0cmFuc2FjdGlvbj1vcHRpb25zLnRyYW5zYWN0aW9ufHx7fTt0aGlzLm5hbWVzcGFjZT10cmFuc2FjdGlvbi5uYW1lc3BhY2V8fERFRkFVTFRfTkFNRVNQQUNFLHRoaXMua2V5TGVuZ3RoPXRyYW5zYWN0aW9uLmtleUxlbmd0aHx8MzIsdGhpcy5zdG9yYWdlPW5ldyBTdG9yYWdlKG9wdGlvbnMpLHRoaXMub3B0aW9ucz1vcHRpb25zfWZ1bmN0aW9uIElmcmFtZUhhbmRsZXIob3B0aW9ucyl7aWYodGhpcy51cmw9b3B0aW9ucy51cmwsdGhpcy5jYWxsYmFjaz1vcHRpb25zLmNhbGxiYWNrLHRoaXMudGltZW91dD1vcHRpb25zLnRpbWVvdXR8fDZlNCx0aGlzLnRpbWVvdXRDYWxsYmFjaz1vcHRpb25zLnRpbWVvdXRDYWxsYmFja3x8bnVsbCx0aGlzLmV2ZW50TGlzdGVuZXJUeXBlPW9wdGlvbnMuZXZlbnRMaXN0ZW5lclR5cGV8fCJtZXNzYWdlIix0aGlzLmlmcmFtZT1udWxsLHRoaXMudGltZW91dEhhbmRsZT1udWxsLHRoaXMuX2Rlc3Ryb3lUaW1lb3V0PW51bGwsdGhpcy50cmFuc2llbnRNZXNzYWdlRXZlbnRMaXN0ZW5lcj1udWxsLHRoaXMucHJveHlFdmVudExpc3RlbmVyPW51bGwsdGhpcy5ldmVudFZhbGlkYXRvcj1vcHRpb25zLmV2ZW50VmFsaWRhdG9yfHx7aXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiEwfX0sImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuY2FsbGJhY2spdGhyb3cgbmV3IEVycm9yKCJvcHRpb25zLmNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIFdlYk1lc3NhZ2VIYW5kbGVyKHdlYkF1dGgpe3RoaXMud2ViQXV0aD13ZWJBdXRoLHRoaXMud2Fybj1uZXcgV2Fybih3ZWJBdXRoLmJhc2VPcHRpb25zKX1mdW5jdGlvbiBDcm9zc09yaWdpbkF1dGhlbnRpY2F0aW9uKHdlYkF1dGgsb3B0aW9ucyl7dGhpcy53ZWJBdXRoPXdlYkF1dGgsdGhpcy5iYXNlT3B0aW9ucz1vcHRpb25zLHRoaXMucmVxdWVzdD1uZXcgUmVxdWVzdEJ1aWxkZXIob3B0aW9ucyksdGhpcy53ZWJNZXNzYWdlSGFuZGxlcj1uZXcgV2ViTWVzc2FnZUhhbmRsZXIod2ViQXV0aCksdGhpcy5zdG9yYWdlPW5ldyBTdG9yYWdlKG9wdGlvbnMpfWZ1bmN0aW9uIGNyZWF0ZUtleShvcmlnaW4sY29JZCl7cmV0dXJuWyJjby92ZXJpZmllciIsZW5jb2RlVVJJQ29tcG9uZW50KG9yaWdpbiksZW5jb2RlVVJJQ29tcG9uZW50KGNvSWQpXS5qb2luKCIvIil9ZnVuY3Rpb24gUmVkaXJlY3QoYXV0aDAsb3B0aW9ucyl7dGhpcy53ZWJBdXRoPWF1dGgwLHRoaXMuYmFzZU9wdGlvbnM9b3B0aW9ucyx0aGlzLmNyb3NzT3JpZ2luQXV0aGVudGljYXRpb249bmV3IENyb3NzT3JpZ2luQXV0aGVudGljYXRpb24oYXV0aDAsdGhpcy5iYXNlT3B0aW9ucyksdGhpcy53YXJuPW5ldyBXYXJuKHtkaXNhYmxlV2FybmluZ3M6ISFvcHRpb25zLl9kaXNhYmxlRGVwcmVjYXRpb25XYXJuaW5nc30pfVRyYW5zYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbihvcHRpb25zKXtpZighb3B0aW9ucy5yZXNwb25zZVR5cGUpdGhyb3cgbmV3IEVycm9yKCJyZXNwb25zZVR5cGUgaXMgcmVxdWlyZWQiKTt2YXIgbGFzdFVzZWRDb25uZWN0aW9uPW9wdGlvbnMucmVhbG18fG9wdGlvbnMuY29ubmVjdGlvbixyZXNwb25zZVR5cGVJbmNsdWRlc0lkVG9rZW49LTEhPT1vcHRpb25zLnJlc3BvbnNlVHlwZS5pbmRleE9mKCJpZF90b2tlbiIpLHRyYW5zYWN0aW9uPXRoaXMuZ2VuZXJhdGVUcmFuc2FjdGlvbihvcHRpb25zLmFwcFN0YXRlLG9wdGlvbnMuc3RhdGUsb3B0aW9ucy5ub25jZSxsYXN0VXNlZENvbm5lY3Rpb24scmVzcG9uc2VUeXBlSW5jbHVkZXNJZFRva2VuKTtyZXR1cm4gb3B0aW9ucy5zdGF0ZXx8KG9wdGlvbnMuc3RhdGU9dHJhbnNhY3Rpb24uc3RhdGUpLHJlc3BvbnNlVHlwZUluY2x1ZGVzSWRUb2tlbiYmIW9wdGlvbnMubm9uY2UmJihvcHRpb25zLm5vbmNlPXRyYW5zYWN0aW9uLm5vbmNlKSxvcHRpb25zfSxUcmFuc2FjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdlbmVyYXRlVHJhbnNhY3Rpb249ZnVuY3Rpb24oYXBwU3RhdGUsc3RhdGUsbm9uY2UsbGFzdFVzZWRDb25uZWN0aW9uLGdlbmVyYXRlTm9uY2Upe3JldHVybiBzdGF0ZT1zdGF0ZXx8cmFuZG9tLnJhbmRvbVN0cmluZyh0aGlzLmtleUxlbmd0aCksbm9uY2U9bm9uY2V8fChnZW5lcmF0ZU5vbmNlP3JhbmRvbS5yYW5kb21TdHJpbmcodGhpcy5rZXlMZW5ndGgpOm51bGwpLHdpbmRvd0hlbHBlci5nZXRXaW5kb3coKS5sb2NhdGlvbi5ob3N0PT09dGhpcy5vcHRpb25zLmRvbWFpbnx8dGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy5uYW1lc3BhY2Urc3RhdGUse25vbmNlOm5vbmNlLGFwcFN0YXRlOmFwcFN0YXRlLHN0YXRlOnN0YXRlLGxhc3RVc2VkQ29ubmVjdGlvbjpsYXN0VXNlZENvbm5lY3Rpb259LHtleHBpcmVzOjEvNDh9KSx7c3RhdGU6c3RhdGUsbm9uY2U6bm9uY2V9fSxUcmFuc2FjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFN0b3JlZFRyYW5zYWN0aW9uPWZ1bmN0aW9uKHN0YXRlKXt2YXIgdHJhbnNhY3Rpb25EYXRhO3JldHVybiB0cmFuc2FjdGlvbkRhdGE9dGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5uYW1lc3BhY2Urc3RhdGUpLHRoaXMuY2xlYXJUcmFuc2FjdGlvbihzdGF0ZSksdHJhbnNhY3Rpb25EYXRhfSxUcmFuc2FjdGlvbk1hbmFnZXIucHJvdG90eXBlLmNsZWFyVHJhbnNhY3Rpb249ZnVuY3Rpb24oc3RhdGUpe3RoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMubmFtZXNwYWNlK3N0YXRlKX0sSWZyYW1lSGFuZGxlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBfdGhpcz10aGlzLF93aW5kb3c9d2luZG93SGVscGVyLmdldFdpbmRvdygpO3N3aXRjaCh0aGlzLmlmcmFtZT1fd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLHRoaXMuaWZyYW1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMucHJveHlFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGUpe190aGlzLmV2ZW50TGlzdGVuZXIoZSl9LHRoaXMuZXZlbnRMaXN0ZW5lclR5cGUpe2Nhc2UibWVzc2FnZSI6dGhpcy5ldmVudFNvdXJjZU9iamVjdD1fd2luZG93O2JyZWFrO2Nhc2UibG9hZCI6dGhpcy5ldmVudFNvdXJjZU9iamVjdD10aGlzLmlmcmFtZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZXZlbnQgbGlzdGVuZXIgdHlwZTogIit0aGlzLmV2ZW50TGlzdGVuZXJUeXBlKX10aGlzLmV2ZW50U291cmNlT2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ldmVudExpc3RlbmVyVHlwZSx0aGlzLnByb3h5RXZlbnRMaXN0ZW5lciwhMSksX3dpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuaWZyYW1lKSx0aGlzLmlmcmFtZS5zcmM9dGhpcy51cmwsdGhpcy50aW1lb3V0SGFuZGxlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtfdGhpcy50aW1lb3V0SGFuZGxlcigpfSx0aGlzLnRpbWVvdXQpfSxJZnJhbWVIYW5kbGVyLnByb3RvdHlwZS5ldmVudExpc3RlbmVyPWZ1bmN0aW9uKGV2ZW50KXt2YXIgZXZlbnREYXRhPXtldmVudDpldmVudCxzb3VyY2VPYmplY3Q6dGhpcy5ldmVudFNvdXJjZU9iamVjdH07dGhpcy5ldmVudFZhbGlkYXRvci5pc1ZhbGlkKGV2ZW50RGF0YSkmJih0aGlzLmRlc3Ryb3koKSx0aGlzLmNhbGxiYWNrKGV2ZW50RGF0YSkpfSxJZnJhbWVIYW5kbGVyLnByb3RvdHlwZS50aW1lb3V0SGFuZGxlcj1mdW5jdGlvbigpe3RoaXMuZGVzdHJveSgpLHRoaXMudGltZW91dENhbGxiYWNrJiZ0aGlzLnRpbWVvdXRDYWxsYmFjaygpfSxJZnJhbWVIYW5kbGVyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIF90aGlzPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dEhhbmRsZSksdGhpcy5fZGVzdHJveVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe190aGlzLmV2ZW50U291cmNlT2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoX3RoaXMuZXZlbnRMaXN0ZW5lclR5cGUsX3RoaXMucHJveHlFdmVudExpc3RlbmVyLCExKSxfdGhpcy5pZnJhbWUucGFyZW50Tm9kZSYmX3RoaXMuaWZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoX3RoaXMuaWZyYW1lKX0sMCl9LFdlYk1lc3NhZ2VIYW5kbGVyLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24ob3B0aW9ucyxjYil7dmFyIF90aGlzPXRoaXM7b3B0aW9ucy5yZXNwb25zZU1vZGU9IndlYl9tZXNzYWdlIixvcHRpb25zLnByb21wdD0ibm9uZSI7dmFyIGN1cnJlbnRPcmlnaW49d2luZG93SGVscGVyLmdldE9yaWdpbigpLHJlZGlyZWN0VXJpT3JpZ2luPW9iamVjdEhlbHBlci5nZXRPcmlnaW5Gcm9tVXJsKG9wdGlvbnMucmVkaXJlY3RVcmkpO2lmKHJlZGlyZWN0VXJpT3JpZ2luJiZjdXJyZW50T3JpZ2luIT09cmVkaXJlY3RVcmlPcmlnaW4pcmV0dXJuIGNiKHtlcnJvcjoib3JpZ2luX21pc21hdGNoIixlcnJvcl9kZXNjcmlwdGlvbjoiVGhlIHJlZGlyZWN0VXJpJ3Mgb3JpZ2luICgiK3JlZGlyZWN0VXJpT3JpZ2luKyIpIHNob3VsZCBtYXRjaCB0aGUgd2luZG93J3Mgb3JpZ2luICgiK2N1cnJlbnRPcmlnaW4rIikuIn0pOyFmdW5jdGlvbihhdXRob3JpemVVcmwsb3B0aW9ucyxjYWxsYmFjayl7bmV3IElmcmFtZUhhbmRsZXIoe3VybDphdXRob3JpemVVcmwsZXZlbnRMaXN0ZW5lclR5cGU6Im1lc3NhZ2UiLGNhbGxiYWNrOmZ1bmN0aW9uKGV2ZW50RGF0YSl7Y2FsbGJhY2sobnVsbCxldmVudERhdGEpfSx0aW1lb3V0Om9wdGlvbnMudGltZW91dCxldmVudFZhbGlkYXRvcjp7aXNWYWxpZDpmdW5jdGlvbihldmVudERhdGEpe3JldHVybiJhdXRob3JpemF0aW9uX3Jlc3BvbnNlIj09PWV2ZW50RGF0YS5ldmVudC5kYXRhLnR5cGUmJm9wdGlvbnMuc3RhdGU9PT1ldmVudERhdGEuZXZlbnQuZGF0YS5yZXNwb25zZS5zdGF0ZX19LHRpbWVvdXRDYWxsYmFjazpmdW5jdGlvbigpe2NhbGxiYWNrKHtlcnJvcjoidGltZW91dCIsZXJyb3JfZGVzY3JpcHRpb246IlRpbWVvdXQgZHVyaW5nIGV4ZWN1dGluZyB3ZWJfbWVzc2FnZSBjb21tdW5pY2F0aW9uIixzdGF0ZTpvcHRpb25zLnN0YXRlfSl9fSkuaW5pdCgpfSh0aGlzLndlYkF1dGguY2xpZW50LmJ1aWxkQXV0aG9yaXplVXJsKG9wdGlvbnMpLG9wdGlvbnMsZnVuY3Rpb24oZXJyLGV2ZW50RGF0YSl7dmFyIGVycm9yPWVycjtpZighZXJyJiZldmVudERhdGEuZXZlbnQuZGF0YS5yZXNwb25zZS5lcnJvciYmKGVycm9yPWV2ZW50RGF0YS5ldmVudC5kYXRhLnJlc3BvbnNlKSwhZXJyb3Ipe3ZhciBwYXJzZWRIYXNoPWV2ZW50RGF0YS5ldmVudC5kYXRhLnJlc3BvbnNlO3JldHVybiBfdGhpcy53ZWJBdXRoLnZhbGlkYXRlQXV0aGVudGljYXRpb25SZXNwb25zZShvcHRpb25zLHBhcnNlZEhhc2gsY2IpfXJldHVybiJjb25zZW50X3JlcXVpcmVkIj09PWVycm9yLmVycm9yJiYibG9jYWxob3N0Ij09PXdpbmRvd0hlbHBlci5nZXRXaW5kb3coKS5sb2NhdGlvbi5ob3N0bmFtZSYmX3RoaXMud2Fybi53YXJuaW5nKCJDb25zZW50IFJlcXVpcmVkLiBDb25zZW50IGNhbid0IGJlIHNraXBwZWQgb24gbG9jYWxob3N0LiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9hdXRoMC5jb20vZG9jcy9hcGktYXV0aC91c2VyLWNvbnNlbnQjc2tpcHBpbmctY29uc2VudC1mb3ItZmlyc3QtcGFydHktY2xpZW50cyIpLF90aGlzLndlYkF1dGgudHJhbnNhY3Rpb25NYW5hZ2VyLmNsZWFyVHJhbnNhY3Rpb24oZXJyb3Iuc3RhdGUpLGNiKG9iamVjdEhlbHBlci5waWNrKGVycm9yLFsiZXJyb3IiLCJlcnJvcl9kZXNjcmlwdGlvbiJdKSl9KX0sQ3Jvc3NPcmlnaW5BdXRoZW50aWNhdGlvbi5wcm90b3R5cGUubG9naW49ZnVuY3Rpb24ob3B0aW9ucyxjYil7dmFyIF90aGlzPXRoaXMsdXJsPXVybEpvaW4odGhpcy5iYXNlT3B0aW9ucy5yb290VXJsLCIvY28vYXV0aGVudGljYXRlIik7b3B0aW9ucy51c2VybmFtZT1vcHRpb25zLnVzZXJuYW1lfHxvcHRpb25zLmVtYWlsLGRlbGV0ZSBvcHRpb25zLmVtYWlsO3ZhciBhdXRoZW50aWNhdGVCb2R5PXtjbGllbnRfaWQ6b3B0aW9ucy5jbGllbnRJRHx8dGhpcy5iYXNlT3B0aW9ucy5jbGllbnRJRCx1c2VybmFtZTpvcHRpb25zLnVzZXJuYW1lfTtvcHRpb25zLnBhc3N3b3JkJiYoYXV0aGVudGljYXRlQm9keS5wYXNzd29yZD1vcHRpb25zLnBhc3N3b3JkKSxvcHRpb25zLm90cCYmKGF1dGhlbnRpY2F0ZUJvZHkub3RwPW9wdGlvbnMub3RwKTt2YXIgcmVhbG09b3B0aW9ucy5yZWFsbXx8dGhpcy5iYXNlT3B0aW9ucy5yZWFsbTtpZihyZWFsbSl7dmFyIGNyZWRlbnRpYWxUeXBlPW9wdGlvbnMuY3JlZGVudGlhbFR5cGV8fHRoaXMuYmFzZU9wdGlvbnMuY3JlZGVudGlhbFR5cGV8fCJodHRwOi8vYXV0aDAuY29tL29hdXRoL2dyYW50LXR5cGUvcGFzc3dvcmQtcmVhbG0iO2F1dGhlbnRpY2F0ZUJvZHkucmVhbG09cmVhbG0sYXV0aGVudGljYXRlQm9keS5jcmVkZW50aWFsX3R5cGU9Y3JlZGVudGlhbFR5cGV9ZWxzZSBhdXRoZW50aWNhdGVCb2R5LmNyZWRlbnRpYWxfdHlwZT0icGFzc3dvcmQiO3RoaXMucmVxdWVzdC5wb3N0KHVybCkud2l0aENyZWRlbnRpYWxzKCkuc2VuZChhdXRoZW50aWNhdGVCb2R5KS5lbmQoZnVuY3Rpb24oZXJyLGRhdGEpe2lmKGVycil7dmFyIGVycm9yT2JqZWN0PWVyci5yZXNwb25zZSYmZXJyLnJlc3BvbnNlLmJvZHl8fHtlcnJvcjoicmVxdWVzdF9lcnJvciIsZXJyb3JfZGVzY3JpcHRpb246SlNPTi5zdHJpbmdpZnkoZXJyKX07cmV0dXJuIHdyYXBDYWxsYmFjayhjYix7Zm9yY2VMZWdhY3lFcnJvcjohMH0pKGVycm9yT2JqZWN0KX12YXIgcG9wdXBNb2RlPSEwPT09b3B0aW9ucy5wb3B1cDtvcHRpb25zPW9iamVjdEhlbHBlci5ibGFja2xpc3Qob3B0aW9ucyxbInBhc3N3b3JkIiwiY3JlZGVudGlhbFR5cGUiLCJvdHAiLCJwb3B1cCJdKTt2YXIgYXV0aG9yaXplT3B0aW9ucz1vYmplY3RIZWxwZXIubWVyZ2Uob3B0aW9ucykud2l0aCh7bG9naW5UaWNrZXQ6ZGF0YS5ib2R5LmxvZ2luX3RpY2tldH0pLGtleT1jcmVhdGVLZXkoX3RoaXMuYmFzZU9wdGlvbnMucm9vdFVybCxkYXRhLmJvZHkuY29faWQpO190aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksZGF0YS5ib2R5LmNvX3ZlcmlmaWVyLHtleHBpcmVzOjEvOTZ9KSxwb3B1cE1vZGU/X3RoaXMud2ViTWVzc2FnZUhhbmRsZXIucnVuKGF1dGhvcml6ZU9wdGlvbnMsd3JhcENhbGxiYWNrKGNiLHtmb3JjZUxlZ2FjeUVycm9yOiEwfSkpOl90aGlzLndlYkF1dGguYXV0aG9yaXplKGF1dGhvcml6ZU9wdGlvbnMpfSl9LENyb3NzT3JpZ2luQXV0aGVudGljYXRpb24ucHJvdG90eXBlLmNhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHRhcmdldE9yaWdpbj1kZWNvZGVVUklDb21wb25lbnQoZnVuY3Rpb24obmFtZSl7dmFyIHBhcnRzPSgiJiIrd2luZG93SGVscGVyLmdldFdpbmRvdygpLmxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpKS5zcGxpdCgiJiIrbmFtZSsiPSIpO2lmKDI9PT1wYXJ0cy5sZW5ndGgpcmV0dXJuIHBhcnRzLnBvcCgpLnNwbGl0KCImIikuc2hpZnQoKX0oIm9yaWdpbiIpKSx0aGVXaW5kb3c9d2luZG93SGVscGVyLmdldFdpbmRvdygpLF90aGlzPXRoaXM7dGhlV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKGV2dCl7aWYoImNvX3ZlcmlmaWVyX3JlcXVlc3QiPT09ZXZ0LmRhdGEudHlwZSl7dmFyIGtleT1jcmVhdGVLZXkoZXZ0Lm9yaWdpbixldnQuZGF0YS5yZXF1ZXN0LmlkKSx2ZXJpZmllcj1mdW5jdGlvbihzdG9yYWdlLGtleSl7dHJ5e3ZhciB2ZXJpZmllcj1zdG9yYWdlLmdldEl0ZW0oa2V5KTtyZXR1cm4gc3RvcmFnZS5yZW1vdmVJdGVtKGtleSksdmVyaWZpZXJ8fCIifWNhdGNoKGUpe3JldHVybiIifX0oX3RoaXMuc3RvcmFnZSxrZXkpO2V2dC5zb3VyY2UucG9zdE1lc3NhZ2Uoe3R5cGU6ImNvX3ZlcmlmaWVyX3Jlc3BvbnNlIixyZXNwb25zZTp7dmVyaWZpZXI6dmVyaWZpZXJ9fSxldnQub3JpZ2luKX19KSx0aGVXaW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHt0eXBlOiJyZWFkeSJ9LHRhcmdldE9yaWdpbil9LFJlZGlyZWN0LnByb3RvdHlwZS5sb2dpbldpdGhDcmVkZW50aWFscz1mdW5jdGlvbihvcHRpb25zLGNiKXtvcHRpb25zLnJlYWxtPW9wdGlvbnMucmVhbG18fG9wdGlvbnMuY29ubmVjdGlvbixkZWxldGUgb3B0aW9ucy5jb25uZWN0aW9uLHRoaXMuY3Jvc3NPcmlnaW5BdXRoZW50aWNhdGlvbi5sb2dpbihvcHRpb25zLGNiKX0sUmVkaXJlY3QucHJvdG90eXBlLnNpZ251cEFuZExvZ2luPWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3ZhciBfdGhpcz10aGlzO3JldHVybiB0aGlzLndlYkF1dGguY2xpZW50LmRiQ29ubmVjdGlvbi5zaWdudXAob3B0aW9ucyxmdW5jdGlvbihlcnIpe3JldHVybiBlcnI/Y2IoZXJyKToob3B0aW9ucy5yZWFsbT1vcHRpb25zLnJlYWxtfHxvcHRpb25zLmNvbm5lY3Rpb24sZGVsZXRlIG9wdGlvbnMuY29ubmVjdGlvbixfdGhpcy53ZWJBdXRoLmxvZ2luKG9wdGlvbnMsY2IpKX0pfTt2YXIgd2luY2hhbj1jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbihtb2R1bGUpe3ZhciBXaW5DaGFuPWZ1bmN0aW9uKCl7dmFyIFJFTEFZX0ZSQU1FX05BTUU9Il9fd2luY2hhbl9yZWxheV9mcmFtZSIsQ0xPU0VfQ01EPSJkaWUiO2Z1bmN0aW9uIGFkZExpc3RlbmVyKHcsZXZlbnQsY2Ipe3cuYXR0YWNoRXZlbnQ/dy5hdHRhY2hFdmVudCgib24iK2V2ZW50LGNiKTp3LmFkZEV2ZW50TGlzdGVuZXImJncuYWRkRXZlbnRMaXN0ZW5lcihldmVudCxjYiwhMSl9ZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodyxldmVudCxjYil7dy5kZXRhY2hFdmVudD93LmRldGFjaEV2ZW50KCJvbiIrZXZlbnQsY2IpOncucmVtb3ZlRXZlbnRMaXN0ZW5lciYmdy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LGNiLCExKX1mdW5jdGlvbiBleHRyYWN0T3JpZ2luKHVybCl7L15odHRwcz86XC9cLy8udGVzdCh1cmwpfHwodXJsPXdpbmRvdy5sb2NhdGlvbi5ocmVmKTt2YXIgbT0vXihodHRwcz86XC9cL1tcLV9hLXpBLVpcLjAtOTpdKykvLmV4ZWModXJsKTtyZXR1cm4gbT9tWzFdOnVybH12YXIgaXNJRT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yKXJldHVybiExO3ZhciBydj0tMSx1YT1uYXZpZ2F0b3IudXNlckFnZW50OyJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiPT09bmF2aWdhdG9yLmFwcE5hbWU/bnVsbCE9bmV3IFJlZ0V4cCgiTVNJRSAoWzAtOV17MSx9Wy4wLTldezAsfSkiKS5leGVjKHVhKSYmKHJ2PXBhcnNlRmxvYXQoUmVnRXhwLiQxKSk6dWEuaW5kZXhPZigiVHJpZGVudCIpPi0xJiZudWxsIT09bmV3IFJlZ0V4cCgicnY6KFswLTldezIsMn1bLjAtOV17MCx9KSIpLmV4ZWModWEpJiYocnY9cGFyc2VGbG9hdChSZWdFeHAuJDEpKTtyZXR1cm4gcnY+PTh9KCk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5KU09OJiZ3aW5kb3cuSlNPTi5zdHJpbmdpZnkmJndpbmRvdy5KU09OLnBhcnNlJiZ3aW5kb3cucG9zdE1lc3NhZ2U/e29wZW46ZnVuY3Rpb24ob3B0cyxjYil7aWYoIWNiKXRocm93Im1pc3NpbmcgcmVxdWlyZWQgY2FsbGJhY2sgYXJndW1lbnQiO3ZhciBlcnIsaWZyYW1lO29wdHMudXJsfHwoZXJyPSJtaXNzaW5nIHJlcXVpcmVkICd1cmwnIHBhcmFtZXRlciIpLG9wdHMucmVsYXlfdXJsfHwoZXJyPSJtaXNzaW5nIHJlcXVpcmVkICdyZWxheV91cmwnIHBhcmFtZXRlciIpLGVyciYmc2V0VGltZW91dChmdW5jdGlvbigpe2NiKGVycil9LDApLG9wdHMud2luZG93X25hbWV8fChvcHRzLndpbmRvd19uYW1lPW51bGwpLG9wdHMud2luZG93X2ZlYXR1cmVzJiYhZnVuY3Rpb24oKXt0cnl7dmFyIHVzZXJBZ2VudD1uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybi0xIT11c2VyQWdlbnQuaW5kZXhPZigiRmVubmVjLyIpfHwtMSE9dXNlckFnZW50LmluZGV4T2YoIkZpcmVmb3gvIikmJi0xIT11c2VyQWdlbnQuaW5kZXhPZigiQW5kcm9pZCIpfWNhdGNoKGUpe31yZXR1cm4hMX0oKXx8KG9wdHMud2luZG93X2ZlYXR1cmVzPXZvaWQgMCk7dmFyIG1lc3NhZ2VUYXJnZXQsb3JpZ2luPW9wdHMub3JpZ2lufHxleHRyYWN0T3JpZ2luKG9wdHMudXJsKTtpZihvcmlnaW4hPT1leHRyYWN0T3JpZ2luKG9wdHMucmVsYXlfdXJsKSlyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe2NiKCJpbnZhbGlkIGFyZ3VtZW50czogb3JpZ2luIG9mIHVybCBhbmQgcmVsYXlfdXJsIG11c3QgbWF0Y2giKX0sMCk7aXNJRSYmKChpZnJhbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIikpLnNldEF0dHJpYnV0ZSgic3JjIixvcHRzLnJlbGF5X3VybCksaWZyYW1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGlmcmFtZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLFJFTEFZX0ZSQU1FX05BTUUpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKSxtZXNzYWdlVGFyZ2V0PWlmcmFtZS5jb250ZW50V2luZG93KTt2YXIgdz1vcHRzLnBvcHVwfHx3aW5kb3cub3BlbihvcHRzLnVybCxvcHRzLndpbmRvd19uYW1lLG9wdHMud2luZG93X2ZlYXR1cmVzKTtvcHRzLnBvcHVwJiYody5sb2NhdGlvbi5ocmVmPW9wdHMudXJsKSxtZXNzYWdlVGFyZ2V0fHwobWVzc2FnZVRhcmdldD13KTt2YXIgY2xvc2VJbnRlcnZhbD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3cmJncuY2xvc2VkJiYoY2xlYW51cCgpLGNiJiYoY2IoIlVzZXIgY2xvc2VkIHRoZSBwb3B1cCB3aW5kb3ciKSxjYj1udWxsKSl9LDUwMCkscmVxPUpTT04uc3RyaW5naWZ5KHthOiJyZXF1ZXN0IixkOm9wdHMucGFyYW1zfSk7ZnVuY3Rpb24gY2xlYW51cCgpe2lmKGlmcmFtZSYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpZnJhbWUpLGlmcmFtZT12b2lkIDAsY2xvc2VJbnRlcnZhbCYmKGNsb3NlSW50ZXJ2YWw9Y2xlYXJJbnRlcnZhbChjbG9zZUludGVydmFsKSkscmVtb3ZlTGlzdGVuZXIod2luZG93LCJtZXNzYWdlIixvbk1lc3NhZ2UpLHJlbW92ZUxpc3RlbmVyKHdpbmRvdywidW5sb2FkIixjbGVhbnVwKSx3KXRyeXt3LmNsb3NlKCl9Y2F0Y2goc2VjdXJpdHlWaW9sYXRpb24pe21lc3NhZ2VUYXJnZXQucG9zdE1lc3NhZ2UoQ0xPU0VfQ01ELG9yaWdpbil9dz1tZXNzYWdlVGFyZ2V0PXZvaWQgMH1mdW5jdGlvbiBvbk1lc3NhZ2UoZSl7aWYoZS5vcmlnaW49PT1vcmlnaW4pe3RyeXt2YXIgZD1KU09OLnBhcnNlKGUuZGF0YSl9Y2F0Y2goZXJyKXtpZihjYilyZXR1cm4gY2IoZXJyKTt0aHJvdyBlcnJ9InJlYWR5Ij09PWQuYT9tZXNzYWdlVGFyZ2V0LnBvc3RNZXNzYWdlKHJlcSxvcmlnaW4pOiJlcnJvciI9PT1kLmE/KGNsZWFudXAoKSxjYiYmKGNiKGQuZCksY2I9bnVsbCkpOiJyZXNwb25zZSI9PT1kLmEmJihjbGVhbnVwKCksY2ImJihjYihudWxsLGQuZCksY2I9bnVsbCkpfX1yZXR1cm4gYWRkTGlzdGVuZXIod2luZG93LCJ1bmxvYWQiLGNsZWFudXApLGFkZExpc3RlbmVyKHdpbmRvdywibWVzc2FnZSIsb25NZXNzYWdlKSx7b3JpZ2luYWxQb3B1cDp3LGNsb3NlOmNsZWFudXAsZm9jdXM6ZnVuY3Rpb24oKXtpZih3KXRyeXt3LmZvY3VzKCl9Y2F0Y2goZSl7fX19fSxvbk9wZW46ZnVuY3Rpb24oY2Ipe3ZhciBvPSIqIixtc2dUYXJnZXQ9aXNJRT9mdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbjtmb3IodmFyIGZyYW1lcz13aW5kb3cub3BlbmVyLmZyYW1lcyxpPWZyYW1lcy5sZW5ndGgtMTtpPj0wO2ktLSl0cnl7aWYoZnJhbWVzW2ldLmxvY2F0aW9uLnByb3RvY29sPT09d2luZG93LmxvY2F0aW9uLnByb3RvY29sJiZmcmFtZXNbaV0ubG9jYXRpb24uaG9zdD09PXdpbmRvdy5sb2NhdGlvbi5ob3N0JiZmcmFtZXNbaV0ubmFtZT09PVJFTEFZX0ZSQU1FX05BTUUpcmV0dXJuIGZyYW1lc1tpXX1jYXRjaChlKXt9fSgpOndpbmRvdy5vcGVuZXI7aWYoIW1zZ1RhcmdldCl0aHJvdyJjYW4ndCBmaW5kIHJlbGF5IGZyYW1lIjtmdW5jdGlvbiBkb1Bvc3QobXNnKXttc2c9SlNPTi5zdHJpbmdpZnkobXNnKSxpc0lFP21zZ1RhcmdldC5kb1Bvc3QobXNnLG8pOm1zZ1RhcmdldC5wb3N0TWVzc2FnZShtc2csbyl9ZnVuY3Rpb24gb25EaWUoZSl7aWYoZS5kYXRhPT09Q0xPU0VfQ01EKXRyeXt3aW5kb3cuY2xvc2UoKX1jYXRjaChvX08pe319YWRkTGlzdGVuZXIoaXNJRT9tc2dUYXJnZXQ6d2luZG93LCJtZXNzYWdlIixmdW5jdGlvbiBvbk1lc3NhZ2UoZSl7dmFyIGQ7dHJ5e2Q9SlNPTi5wYXJzZShlLmRhdGEpfWNhdGNoKGVycil7fWQmJiJyZXF1ZXN0Ij09PWQuYSYmKHJlbW92ZUxpc3RlbmVyKHdpbmRvdywibWVzc2FnZSIsb25NZXNzYWdlKSxvPWUub3JpZ2luLGNiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Y2IobyxkLmQsZnVuY3Rpb24ocil7Y2I9dm9pZCAwLGRvUG9zdCh7YToicmVzcG9uc2UiLGQ6cn0pfSl9LDApKX0pLGFkZExpc3RlbmVyKGlzSUU/bXNnVGFyZ2V0OndpbmRvdywibWVzc2FnZSIsb25EaWUpO3RyeXtkb1Bvc3Qoe2E6InJlYWR5In0pfWNhdGNoKGUpe2FkZExpc3RlbmVyKG1zZ1RhcmdldCwibG9hZCIsZnVuY3Rpb24oZSl7ZG9Qb3N0KHthOiJyZWFkeSJ9KX0pfXZhciBvblVubG9hZD1mdW5jdGlvbigpe3RyeXtyZW1vdmVMaXN0ZW5lcihpc0lFP21zZ1RhcmdldDp3aW5kb3csIm1lc3NhZ2UiLG9uRGllKX1jYXRjaChvaFdlbGwpe31jYiYmZG9Qb3N0KHthOiJlcnJvciIsZDoiY2xpZW50IGNsb3NlZCB3aW5kb3cifSksY2I9dm9pZCAwO3RyeXt3aW5kb3cuY2xvc2UoKX1jYXRjaChlKXt9fTtyZXR1cm4gYWRkTGlzdGVuZXIod2luZG93LCJ1bmxvYWQiLG9uVW5sb2FkKSx7ZGV0YWNoOmZ1bmN0aW9uKCl7cmVtb3ZlTGlzdGVuZXIod2luZG93LCJ1bmxvYWQiLG9uVW5sb2FkKX19fX06e29wZW46ZnVuY3Rpb24odXJsLHdpbm9wdHMsYXJnLGNiKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Y2IoInVuc3VwcG9ydGVkIGJyb3dzZXIiKX0sMCl9LG9uT3BlbjpmdW5jdGlvbihjYil7c2V0VGltZW91dChmdW5jdGlvbigpe2NiKCJ1bnN1cHBvcnRlZCBicm93c2VyIil9LDApfX19KCk7bW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1XaW5DaGFuKX0pO3ZhciB1cmxIZWxwZXI9e2V4dHJhY3RPcmlnaW46ZnVuY3Rpb24odXJsKXsvXmh0dHBzPzpcL1wvLy50ZXN0KHVybCl8fCh1cmw9d2luZG93LmxvY2F0aW9uLmhyZWYpO3ZhciBtPS9eKGh0dHBzPzpcL1wvWy1fYS16QS1aLjAtOTpdKykvLmV4ZWModXJsKTtyZXR1cm4gbT9tWzFdOnVybH19O2Z1bmN0aW9uIFBvcHVwSGFuZGxlcigpe3RoaXMuX2N1cnJlbnRfcG9wdXA9bnVsbH1mdW5jdGlvbiBQb3B1cCh3ZWJBdXRoLG9wdGlvbnMpe3RoaXMuYmFzZU9wdGlvbnM9b3B0aW9ucyx0aGlzLmJhc2VPcHRpb25zLnBvcHVwT3JpZ2luPW9wdGlvbnMucG9wdXBPcmlnaW4sdGhpcy5jbGllbnQ9d2ViQXV0aC5jbGllbnQsdGhpcy53ZWJBdXRoPXdlYkF1dGgsdGhpcy50cmFuc2FjdGlvbk1hbmFnZXI9bmV3IFRyYW5zYWN0aW9uTWFuYWdlcih0aGlzLmJhc2VPcHRpb25zKSx0aGlzLmNyb3NzT3JpZ2luQXV0aGVudGljYXRpb249bmV3IENyb3NzT3JpZ2luQXV0aGVudGljYXRpb24od2ViQXV0aCx0aGlzLmJhc2VPcHRpb25zKSx0aGlzLndhcm49bmV3IFdhcm4oe2Rpc2FibGVXYXJuaW5nczohIW9wdGlvbnMuX2Rpc2FibGVEZXByZWNhdGlvbldhcm5pbmdzfSl9ZnVuY3Rpb24gU2lsZW50QXV0aGVudGljYXRpb25IYW5kbGVyKG9wdGlvbnMpe3RoaXMuYXV0aGVudGljYXRpb25Vcmw9b3B0aW9ucy5hdXRoZW50aWNhdGlvblVybCx0aGlzLnRpbWVvdXQ9b3B0aW9ucy50aW1lb3V0fHw2ZTQsdGhpcy5oYW5kbGVyPW51bGwsdGhpcy5wb3N0TWVzc2FnZURhdGFUeXBlPW9wdGlvbnMucG9zdE1lc3NhZ2VEYXRhVHlwZXx8ITEsdGhpcy5wb3N0TWVzc2FnZU9yaWdpbj1vcHRpb25zLnBvc3RNZXNzYWdlT3JpZ2lufHx3aW5kb3dIZWxwZXIuZ2V0V2luZG93KCkubG9jYXRpb24ub3JpZ2lufHx3aW5kb3dIZWxwZXIuZ2V0V2luZG93KCkubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3dIZWxwZXIuZ2V0V2luZG93KCkubG9jYXRpb24uaG9zdG5hbWUrKHdpbmRvd0hlbHBlci5nZXRXaW5kb3coKS5sb2NhdGlvbi5wb3J0PyI6Iit3aW5kb3dIZWxwZXIuZ2V0V2luZG93KCkubG9jYXRpb24ucG9ydDoiIil9ZnVuY3Rpb24gVXNlcm5hbWVQYXNzd29yZChvcHRpb25zKXt0aGlzLmJhc2VPcHRpb25zPW9wdGlvbnMsdGhpcy5yZXF1ZXN0PW5ldyBSZXF1ZXN0QnVpbGRlcihvcHRpb25zKSx0aGlzLnRyYW5zYWN0aW9uTWFuYWdlcj1uZXcgVHJhbnNhY3Rpb25NYW5hZ2VyKHRoaXMuYmFzZU9wdGlvbnMpfWZ1bmN0aW9uIEhvc3RlZFBhZ2VzKGNsaWVudCxvcHRpb25zKXt0aGlzLmJhc2VPcHRpb25zPW9wdGlvbnMsdGhpcy5jbGllbnQ9Y2xpZW50LHRoaXMuYmFzZU9wdGlvbnMudW5pdmVyc2FsTG9naW5QYWdlPSEwLHRoaXMucmVxdWVzdD1uZXcgUmVxdWVzdEJ1aWxkZXIodGhpcy5iYXNlT3B0aW9ucyksdGhpcy53YXJuPW5ldyBXYXJuKHtkaXNhYmxlV2FybmluZ3M6ISFvcHRpb25zLl9kaXNhYmxlRGVwcmVjYXRpb25XYXJuaW5nc30pfWZ1bmN0aW9uIFdlYkF1dGgob3B0aW9ucyl7YXNzZXJ0LmNoZWNrKG9wdGlvbnMse3R5cGU6Im9iamVjdCIsbWVzc2FnZToib3B0aW9ucyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0se2RvbWFpbjp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJkb21haW4gb3B0aW9uIGlzIHJlcXVpcmVkIn0sY2xpZW50SUQ6e3R5cGU6InN0cmluZyIsbWVzc2FnZToiY2xpZW50SUQgb3B0aW9uIGlzIHJlcXVpcmVkIn0scmVzcG9uc2VUeXBlOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6InJlc3BvbnNlVHlwZSBpcyBub3QgdmFsaWQifSxyZXNwb25zZU1vZGU6e29wdGlvbmFsOiEwLHR5cGU6InN0cmluZyIsbWVzc2FnZToicmVzcG9uc2VNb2RlIGlzIG5vdCB2YWxpZCJ9LHJlZGlyZWN0VXJpOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6InJlZGlyZWN0VXJpIGlzIG5vdCB2YWxpZCJ9LHNjb3BlOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6InNjb3BlIGlzIG5vdCB2YWxpZCJ9LGF1ZGllbmNlOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6ImF1ZGllbmNlIGlzIG5vdCB2YWxpZCJ9LHBvcHVwT3JpZ2luOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6InBvcHVwT3JpZ2luIGlzIG5vdCB2YWxpZCJ9LGxlZXdheTp7b3B0aW9uYWw6ITAsdHlwZToibnVtYmVyIixtZXNzYWdlOiJsZWV3YXkgaXMgbm90IHZhbGlkIn0scGx1Z2luczp7b3B0aW9uYWw6ITAsdHlwZToiYXJyYXkiLG1lc3NhZ2U6InBsdWdpbnMgaXMgbm90IHZhbGlkIn0sX2Rpc2FibGVEZXByZWNhdGlvbldhcm5pbmdzOntvcHRpb25hbDohMCx0eXBlOiJib29sZWFuIixtZXNzYWdlOiJfZGlzYWJsZURlcHJlY2F0aW9uV2FybmluZ3Mgb3B0aW9uIGlzIG5vdCB2YWxpZCJ9LF9zZW5kVGVsZW1ldHJ5OntvcHRpb25hbDohMCx0eXBlOiJib29sZWFuIixtZXNzYWdlOiJfc2VuZFRlbGVtZXRyeSBvcHRpb24gaXMgbm90IHZhbGlkIn0sX3RlbGVtZXRyeUluZm86e29wdGlvbmFsOiEwLHR5cGU6Im9iamVjdCIsbWVzc2FnZToiX3RlbGVtZXRyeUluZm8gb3B0aW9uIGlzIG5vdCB2YWxpZCJ9LF90aW1lc1RvUmV0cnlGYWlsZWRSZXF1ZXN0czp7b3B0aW9uYWw6ITAsdHlwZToibnVtYmVyIixtZXNzYWdlOiJfdGltZXNUb1JldHJ5RmFpbGVkUmVxdWVzdHMgb3B0aW9uIGlzIG5vdCB2YWxpZCJ9fSksb3B0aW9ucy5vdmVycmlkZXMmJmFzc2VydC5jaGVjayhvcHRpb25zLm92ZXJyaWRlcyx7dHlwZToib2JqZWN0IixtZXNzYWdlOiJvdmVycmlkZXMgb3B0aW9uIGlzIG5vdCB2YWxpZCJ9LHtfX3RlbmFudDp7b3B0aW9uYWw6ITAsdHlwZToic3RyaW5nIixtZXNzYWdlOiJfX3RlbmFudCBvcHRpb24gaXMgcmVxdWlyZWQifSxfX3Rva2VuX2lzc3Vlcjp7b3B0aW9uYWw6ITAsdHlwZToic3RyaW5nIixtZXNzYWdlOiJfX3Rva2VuX2lzc3VlciBvcHRpb24gaXMgcmVxdWlyZWQifSxfX2p3a3NfdXJpOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6Il9fandrc191cmkgaXMgcmVxdWlyZWQifX0pLHRoaXMuYmFzZU9wdGlvbnM9b3B0aW9ucyx0aGlzLmJhc2VPcHRpb25zLnBsdWdpbnM9bmV3IFBsdWdpbkhhbmRsZXIodGhpcyx0aGlzLmJhc2VPcHRpb25zLnBsdWdpbnN8fFtdKSx0aGlzLmJhc2VPcHRpb25zLl9zZW5kVGVsZW1ldHJ5PSExIT09dGhpcy5iYXNlT3B0aW9ucy5fc2VuZFRlbGVtZXRyeXx8dGhpcy5iYXNlT3B0aW9ucy5fc2VuZFRlbGVtZXRyeSx0aGlzLmJhc2VPcHRpb25zLl90aW1lc1RvUmV0cnlGYWlsZWRSZXF1ZXN0cz1vcHRpb25zLl90aW1lc1RvUmV0cnlGYWlsZWRSZXF1ZXN0cz9wYXJzZUludChvcHRpb25zLl90aW1lc1RvUmV0cnlGYWlsZWRSZXF1ZXN0cywwKTowLHRoaXMuYmFzZU9wdGlvbnMudGVuYW50PXRoaXMuYmFzZU9wdGlvbnMub3ZlcnJpZGVzJiZ0aGlzLmJhc2VPcHRpb25zLm92ZXJyaWRlcy5fX3RlbmFudHx8dGhpcy5iYXNlT3B0aW9ucy5kb21haW4uc3BsaXQoIi4iKVswXSx0aGlzLmJhc2VPcHRpb25zLnRva2VuX2lzc3Vlcj10aGlzLmJhc2VPcHRpb25zLm92ZXJyaWRlcyYmdGhpcy5iYXNlT3B0aW9ucy5vdmVycmlkZXMuX190b2tlbl9pc3N1ZXJ8fCJodHRwczovLyIrdGhpcy5iYXNlT3B0aW9ucy5kb21haW4rIi8iLHRoaXMuYmFzZU9wdGlvbnMuandrc1VSST10aGlzLmJhc2VPcHRpb25zLm92ZXJyaWRlcyYmdGhpcy5iYXNlT3B0aW9ucy5vdmVycmlkZXMuX19qd2tzX3VyaSx0aGlzLnRyYW5zYWN0aW9uTWFuYWdlcj1uZXcgVHJhbnNhY3Rpb25NYW5hZ2VyKHRoaXMuYmFzZU9wdGlvbnMpLHRoaXMuY2xpZW50PW5ldyBBdXRoZW50aWNhdGlvbih0aGlzLmJhc2VPcHRpb25zKSx0aGlzLnJlZGlyZWN0PW5ldyBSZWRpcmVjdCh0aGlzLHRoaXMuYmFzZU9wdGlvbnMpLHRoaXMucG9wdXA9bmV3IFBvcHVwKHRoaXMsdGhpcy5iYXNlT3B0aW9ucyksdGhpcy5jcm9zc09yaWdpbkF1dGhlbnRpY2F0aW9uPW5ldyBDcm9zc09yaWdpbkF1dGhlbnRpY2F0aW9uKHRoaXMsdGhpcy5iYXNlT3B0aW9ucyksdGhpcy53ZWJNZXNzYWdlSGFuZGxlcj1uZXcgV2ViTWVzc2FnZUhhbmRsZXIodGhpcyksdGhpcy5fdW5pdmVyc2FsTG9naW49bmV3IEhvc3RlZFBhZ2VzKHRoaXMsdGhpcy5iYXNlT3B0aW9ucyksdGhpcy5zc29kYXRhU3RvcmFnZT1uZXcgU1NPRGF0YVN0b3JhZ2UodGhpcy5iYXNlT3B0aW9ucyl9ZnVuY3Rpb24gUGFzc3dvcmRsZXNzQXV0aGVudGljYXRpb24ocmVxdWVzdCxvcHRpb25zKXt0aGlzLmJhc2VPcHRpb25zPW9wdGlvbnMsdGhpcy5yZXF1ZXN0PXJlcXVlc3R9ZnVuY3Rpb24gREJDb25uZWN0aW9uKHJlcXVlc3Qsb3B0aW9ucyl7dGhpcy5iYXNlT3B0aW9ucz1vcHRpb25zLHRoaXMucmVxdWVzdD1yZXF1ZXN0fWZ1bmN0aW9uIEF1dGhlbnRpY2F0aW9uKGF1dGgwLG9wdGlvbnMpezI9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuYXV0aDA9YXV0aDA6b3B0aW9ucz1hdXRoMCxhc3NlcnQuY2hlY2sob3B0aW9ucyx7dHlwZToib2JqZWN0IixtZXNzYWdlOiJvcHRpb25zIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSx7ZG9tYWluOnt0eXBlOiJzdHJpbmciLG1lc3NhZ2U6ImRvbWFpbiBvcHRpb24gaXMgcmVxdWlyZWQifSxjbGllbnRJRDp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJjbGllbnRJRCBvcHRpb24gaXMgcmVxdWlyZWQifSxyZXNwb25zZVR5cGU6e29wdGlvbmFsOiEwLHR5cGU6InN0cmluZyIsbWVzc2FnZToicmVzcG9uc2VUeXBlIGlzIG5vdCB2YWxpZCJ9LHJlc3BvbnNlTW9kZTp7b3B0aW9uYWw6ITAsdHlwZToic3RyaW5nIixtZXNzYWdlOiJyZXNwb25zZU1vZGUgaXMgbm90IHZhbGlkIn0scmVkaXJlY3RVcmk6e29wdGlvbmFsOiEwLHR5cGU6InN0cmluZyIsbWVzc2FnZToicmVkaXJlY3RVcmkgaXMgbm90IHZhbGlkIn0sc2NvcGU6e29wdGlvbmFsOiEwLHR5cGU6InN0cmluZyIsbWVzc2FnZToic2NvcGUgaXMgbm90IHZhbGlkIn0sYXVkaWVuY2U6e29wdGlvbmFsOiEwLHR5cGU6InN0cmluZyIsbWVzc2FnZToiYXVkaWVuY2UgaXMgbm90IHZhbGlkIn0sX2Rpc2FibGVEZXByZWNhdGlvbldhcm5pbmdzOntvcHRpb25hbDohMCx0eXBlOiJib29sZWFuIixtZXNzYWdlOiJfZGlzYWJsZURlcHJlY2F0aW9uV2FybmluZ3Mgb3B0aW9uIGlzIG5vdCB2YWxpZCJ9LF9zZW5kVGVsZW1ldHJ5OntvcHRpb25hbDohMCx0eXBlOiJib29sZWFuIixtZXNzYWdlOiJfc2VuZFRlbGVtZXRyeSBvcHRpb24gaXMgbm90IHZhbGlkIn0sX3RlbGVtZXRyeUluZm86e29wdGlvbmFsOiEwLHR5cGU6Im9iamVjdCIsbWVzc2FnZToiX3RlbGVtZXRyeUluZm8gb3B0aW9uIGlzIG5vdCB2YWxpZCJ9fSksdGhpcy5iYXNlT3B0aW9ucz1vcHRpb25zLHRoaXMuYmFzZU9wdGlvbnMuX3NlbmRUZWxlbWV0cnk9ITEhPT10aGlzLmJhc2VPcHRpb25zLl9zZW5kVGVsZW1ldHJ5fHx0aGlzLmJhc2VPcHRpb25zLl9zZW5kVGVsZW1ldHJ5LHRoaXMuYmFzZU9wdGlvbnMucm9vdFVybD0iaHR0cHM6Ly8iK3RoaXMuYmFzZU9wdGlvbnMuZG9tYWluLHRoaXMucmVxdWVzdD1uZXcgUmVxdWVzdEJ1aWxkZXIodGhpcy5iYXNlT3B0aW9ucyksdGhpcy5wYXNzd29yZGxlc3M9bmV3IFBhc3N3b3JkbGVzc0F1dGhlbnRpY2F0aW9uKHRoaXMucmVxdWVzdCx0aGlzLmJhc2VPcHRpb25zKSx0aGlzLmRiQ29ubmVjdGlvbj1uZXcgREJDb25uZWN0aW9uKHRoaXMucmVxdWVzdCx0aGlzLmJhc2VPcHRpb25zKSx0aGlzLndhcm49bmV3IFdhcm4oe2Rpc2FibGVXYXJuaW5nczohIW9wdGlvbnMuX2Rpc2FibGVEZXByZWNhdGlvbldhcm5pbmdzfSksdGhpcy5zc29kYXRhU3RvcmFnZT1uZXcgU1NPRGF0YVN0b3JhZ2UodGhpcy5iYXNlT3B0aW9ucyl9ZnVuY3Rpb24gTWFuYWdlbWVudChvcHRpb25zKXthc3NlcnQuY2hlY2sob3B0aW9ucyx7dHlwZToib2JqZWN0IixtZXNzYWdlOiJvcHRpb25zIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSx7ZG9tYWluOnt0eXBlOiJzdHJpbmciLG1lc3NhZ2U6ImRvbWFpbiBvcHRpb24gaXMgcmVxdWlyZWQifSx0b2tlbjp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJ0b2tlbiBvcHRpb24gaXMgcmVxdWlyZWQifSxfc2VuZFRlbGVtZXRyeTp7b3B0aW9uYWw6ITAsdHlwZToiYm9vbGVhbiIsbWVzc2FnZToiX3NlbmRUZWxlbWV0cnkgb3B0aW9uIGlzIG5vdCB2YWxpZCJ9LF90ZWxlbWV0cnlJbmZvOntvcHRpb25hbDohMCx0eXBlOiJvYmplY3QiLG1lc3NhZ2U6Il90ZWxlbWV0cnlJbmZvIG9wdGlvbiBpcyBub3QgdmFsaWQifX0pLHRoaXMuYmFzZU9wdGlvbnM9b3B0aW9ucyx0aGlzLmJhc2VPcHRpb25zLmhlYWRlcnM9e0F1dGhvcml6YXRpb246IkJlYXJlciAiK3RoaXMuYmFzZU9wdGlvbnMudG9rZW59LHRoaXMucmVxdWVzdD1uZXcgUmVxdWVzdEJ1aWxkZXIodGhpcy5iYXNlT3B0aW9ucyksdGhpcy5iYXNlT3B0aW9ucy5yb290VXJsPXVybEpvaW4oImh0dHBzOi8vIit0aGlzLmJhc2VPcHRpb25zLmRvbWFpbiwiYXBpIiwidjIiKX1Qb3B1cEhhbmRsZXIucHJvdG90eXBlLmNhbGN1bGF0ZVBvc2l0aW9uPWZ1bmN0aW9uKG9wdGlvbnMpe3ZhciB3aWR0aD1vcHRpb25zLndpZHRofHw1MDAsaGVpZ2h0PW9wdGlvbnMuaGVpZ2h0fHw2MDAsX3dpbmRvdz13aW5kb3dIZWxwZXIuZ2V0V2luZG93KCksc2NyZWVuWD12b2lkIDAhPT1fd2luZG93LnNjcmVlblg/X3dpbmRvdy5zY3JlZW5YOl93aW5kb3cuc2NyZWVuTGVmdCxzY3JlZW5ZPXZvaWQgMCE9PV93aW5kb3cuc2NyZWVuWT9fd2luZG93LnNjcmVlblk6X3dpbmRvdy5zY3JlZW5Ub3Asb3V0ZXJXaWR0aD12b2lkIDAhPT1fd2luZG93Lm91dGVyV2lkdGg/X3dpbmRvdy5vdXRlcldpZHRoOl93aW5kb3cuZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxvdXRlckhlaWdodD12b2lkIDAhPT1fd2luZG93Lm91dGVySGVpZ2h0P193aW5kb3cub3V0ZXJIZWlnaHQ6X3dpbmRvdy5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDtyZXR1cm57d2lkdGg6d2lkdGgsaGVpZ2h0OmhlaWdodCxsZWZ0Om9wdGlvbnMubGVmdHx8c2NyZWVuWCsob3V0ZXJXaWR0aC13aWR0aCkvMix0b3A6b3B0aW9ucy50b3B8fHNjcmVlblkrKG91dGVySGVpZ2h0LWhlaWdodCkvMn19LFBvcHVwSGFuZGxlci5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbihvcHRpb25zKXt2YXIgX3RoaXM9dGhpcyxfd2luZG93PXdpbmRvd0hlbHBlci5nZXRXaW5kb3coKSxwb3B1cFBvc2l0aW9uPXRoaXMuY2FsY3VsYXRlUG9zaXRpb24ob3B0aW9ucy5wb3B1cE9wdGlvbnN8fHt9KSxwb3B1cE9wdGlvbnM9b2JqZWN0SGVscGVyLm1lcmdlKHBvcHVwUG9zaXRpb24pLndpdGgob3B0aW9ucy5wb3B1cE9wdGlvbnMpLHVybD1vcHRpb25zLnVybHx8ImFib3V0OmJsYW5rIix3aW5kb3dGZWF0dXJlcz1saWJfc3RyaW5naWZ5KHBvcHVwT3B0aW9ucyx7ZW5jb2RlOiExLGRlbGltaXRlcjoiLCJ9KTtyZXR1cm4gdGhpcy5fY3VycmVudF9wb3B1cCYmIXRoaXMuX2N1cnJlbnRfcG9wdXAuY2xvc2VkP3RoaXMuX2N1cnJlbnRfcG9wdXA6KHRoaXMuX2N1cnJlbnRfcG9wdXA9X3dpbmRvdy5vcGVuKHVybCwiYXV0aDBfc2lnbnVwX3BvcHVwIix3aW5kb3dGZWF0dXJlcyksdGhpcy5fY3VycmVudF9wb3B1cC5raWxsPWZ1bmN0aW9uKCl7dGhpcy5jbG9zZSgpLF90aGlzLl9jdXJyZW50X3BvcHVwPW51bGx9LHRoaXMuX2N1cnJlbnRfcG9wdXApfSxQb3B1cEhhbmRsZXIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odXJsLHJlbGF5VXJsLG9wdGlvbnMsY2Ipe3ZhciBfdGhpcz10aGlzLHBvcHVwUG9zaXRpb249dGhpcy5jYWxjdWxhdGVQb3NpdGlvbihvcHRpb25zLnBvcHVwT3B0aW9uc3x8e30pLHBvcHVwT3B0aW9ucz1vYmplY3RIZWxwZXIubWVyZ2UocG9wdXBQb3NpdGlvbikud2l0aChvcHRpb25zLnBvcHVwT3B0aW9ucyksd2luY2hhbk9wdGlvbnM9b2JqZWN0SGVscGVyLm1lcmdlKHt1cmw6dXJsLHJlbGF5X3VybDpyZWxheVVybCx3aW5kb3dfZmVhdHVyZXM6bGliX3N0cmluZ2lmeShwb3B1cE9wdGlvbnMse2RlbGltaXRlcjoiLCIsZW5jb2RlOiExfSkscG9wdXA6dGhpcy5fY3VycmVudF9wb3B1cH0pLndpdGgob3B0aW9ucykscG9wdXA9d2luY2hhbi5vcGVuKHdpbmNoYW5PcHRpb25zLGZ1bmN0aW9uKGVycixkYXRhKXtpZighZXJyfHwiU3ludGF4RXJyb3IiIT09ZXJyLm5hbWUpcmV0dXJuIF90aGlzLl9jdXJyZW50X3BvcHVwPW51bGwsY2IoZXJyLGRhdGEpfSk7cmV0dXJuIHBvcHVwLmZvY3VzKCkscG9wdXB9LFBvcHVwLnByb3RvdHlwZS5idWlsZFBvcHVwSGFuZGxlcj1mdW5jdGlvbigpe3ZhciBwbHVnaW5IYW5kbGVyPXRoaXMuYmFzZU9wdGlvbnMucGx1Z2lucy5nZXQoInBvcHVwLmdldFBvcHVwSGFuZGxlciIpO3JldHVybiBwbHVnaW5IYW5kbGVyP3BsdWdpbkhhbmRsZXIuZ2V0UG9wdXBIYW5kbGVyKCk6bmV3IFBvcHVwSGFuZGxlcn0sUG9wdXAucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24ob3B0aW9ucyl7b3B0aW9ucz1vcHRpb25zfHx7fTt2YXIgcG9wdXA9dGhpcy5idWlsZFBvcHVwSGFuZGxlcigpO3JldHVybiBwb3B1cC5wcmVsb2FkKG9wdGlvbnMpLHBvcHVwfSxQb3B1cC5wcm90b3R5cGUuZ2V0UG9wdXBIYW5kbGVyPWZ1bmN0aW9uKG9wdGlvbnMscHJlbG9hZCl7cmV0dXJuIG9wdGlvbnMucG9wdXBIYW5kbGVyP29wdGlvbnMucG9wdXBIYW5kbGVyOnByZWxvYWQ/dGhpcy5wcmVsb2FkKG9wdGlvbnMpOnRoaXMuYnVpbGRQb3B1cEhhbmRsZXIoKX0sUG9wdXAucHJvdG90eXBlLmNhbGxiYWNrPWZ1bmN0aW9uKG9wdGlvbnMpe3ZhciBfdGhpcz10aGlzLHRoZVdpbmRvdz13aW5kb3dIZWxwZXIuZ2V0V2luZG93KCksb3JpZ2luVXJsPShvcHRpb25zPW9wdGlvbnN8fHt9KS5wb3B1cE9yaWdpbnx8dGhpcy5iYXNlT3B0aW9ucy5wb3B1cE9yaWdpbnx8d2luZG93SGVscGVyLmdldE9yaWdpbigpO3RoZVdpbmRvdy5vcGVuZXI/d2luY2hhbi5vbk9wZW4oZnVuY3Rpb24ocG9wdXBPcmlnaW4scixjYil7aWYocG9wdXBPcmlnaW4hPT1vcmlnaW5VcmwpcmV0dXJuIGNiKHtlcnJvcjoib3JpZ2luX21pc21hdGNoIixlcnJvcl9kZXNjcmlwdGlvbjoiVGhlIHBvcHVwJ3Mgb3JpZ2luICgiK3BvcHVwT3JpZ2luKyIpIHNob3VsZCBtYXRjaCB0aGUgYHBvcHVwT3JpZ2luYCBwYXJhbWV0ZXIgKCIrb3JpZ2luVXJsKyIpLiJ9KTtfdGhpcy53ZWJBdXRoLnBhcnNlSGFzaChvcHRpb25zfHx7fSxmdW5jdGlvbihlcnIsZGF0YSl7cmV0dXJuIGNiKGVycnx8ZGF0YSl9KX0pOnRoZVdpbmRvdy5kb1Bvc3Q9ZnVuY3Rpb24obXNnKXt0aGVXaW5kb3cucGFyZW50JiZ0aGVXaW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKG1zZyxvcmlnaW5VcmwpfX0sUG9wdXAucHJvdG90eXBlLmF1dGhvcml6ZT1mdW5jdGlvbihvcHRpb25zLGNiKXt2YXIgdXJsLHJlbGF5VXJsLHBvcE9wdHM9e30scGx1Z2luSGFuZGxlcj10aGlzLmJhc2VPcHRpb25zLnBsdWdpbnMuZ2V0KCJwb3B1cC5hdXRob3JpemUiKSxwYXJhbXM9b2JqZWN0SGVscGVyLm1lcmdlKHRoaXMuYmFzZU9wdGlvbnMsWyJjbGllbnRJRCIsInNjb3BlIiwiZG9tYWluIiwiYXVkaWVuY2UiLCJ0ZW5hbnQiLCJyZXNwb25zZVR5cGUiLCJyZWRpcmVjdFVyaSIsIl9jc3JmIiwic3RhdGUiLCJfaW50c3RhdGUiLCJub25jZSJdKS53aXRoKG9iamVjdEhlbHBlci5ibGFja2xpc3Qob3B0aW9ucyxbInBvcHVwSGFuZGxlciJdKSk7cmV0dXJuIGFzc2VydC5jaGVjayhwYXJhbXMse3R5cGU6Im9iamVjdCIsbWVzc2FnZToib3B0aW9ucyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0se3Jlc3BvbnNlVHlwZTp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJyZXNwb25zZVR5cGUgb3B0aW9uIGlzIHJlcXVpcmVkIn19KSxyZWxheVVybD11cmxKb2luKHRoaXMuYmFzZU9wdGlvbnMucm9vdFVybCwicmVsYXkuaHRtbCIpLG9wdGlvbnMub3dwP3BhcmFtcy5vd3A9ITA6KHBvcE9wdHMub3JpZ2luPXVybEhlbHBlci5leHRyYWN0T3JpZ2luKHBhcmFtcy5yZWRpcmVjdFVyaSkscmVsYXlVcmw9cGFyYW1zLnJlZGlyZWN0VXJpKSxvcHRpb25zLnBvcHVwT3B0aW9ucyYmKHBvcE9wdHMucG9wdXBPcHRpb25zPW9iamVjdEhlbHBlci5waWNrKG9wdGlvbnMucG9wdXBPcHRpb25zLFsid2lkdGgiLCJoZWlnaHQiLCJ0b3AiLCJsZWZ0Il0pKSxwbHVnaW5IYW5kbGVyJiYocGFyYW1zPXBsdWdpbkhhbmRsZXIucHJvY2Vzc1BhcmFtcyhwYXJhbXMpKSwocGFyYW1zPXRoaXMudHJhbnNhY3Rpb25NYW5hZ2VyLnByb2Nlc3MocGFyYW1zKSkuc2NvcGU9cGFyYW1zLnNjb3BlfHwib3BlbmlkIHByb2ZpbGUgZW1haWwiLGRlbGV0ZSBwYXJhbXMuZG9tYWluLHVybD10aGlzLmNsaWVudC5idWlsZEF1dGhvcml6ZVVybChwYXJhbXMpLHRoaXMuZ2V0UG9wdXBIYW5kbGVyKG9wdGlvbnMpLmxvYWQodXJsLHJlbGF5VXJsLHBvcE9wdHMsd3JhcENhbGxiYWNrKGNiLHtrZWVwT3JpZ2luYWxDYXNpbmc6ITB9KSl9LFBvcHVwLnByb3RvdHlwZS5sb2dpbldpdGhDcmVkZW50aWFscz1mdW5jdGlvbihvcHRpb25zLGNiKXtvcHRpb25zLnJlYWxtPW9wdGlvbnMucmVhbG18fG9wdGlvbnMuY29ubmVjdGlvbixvcHRpb25zLnBvcHVwPSEwLG9wdGlvbnM9b2JqZWN0SGVscGVyLm1lcmdlKHRoaXMuYmFzZU9wdGlvbnMsWyJyZWRpcmVjdFVyaSIsInJlc3BvbnNlVHlwZSIsInN0YXRlIiwibm9uY2UiXSkud2l0aChvYmplY3RIZWxwZXIuYmxhY2tsaXN0KG9wdGlvbnMsWyJwb3B1cEhhbmRsZXIiLCJjb25uZWN0aW9uIl0pKSxvcHRpb25zPXRoaXMudHJhbnNhY3Rpb25NYW5hZ2VyLnByb2Nlc3Mob3B0aW9ucyksdGhpcy5jcm9zc09yaWdpbkF1dGhlbnRpY2F0aW9uLmxvZ2luKG9wdGlvbnMsY2IpfSxQb3B1cC5wcm90b3R5cGUucGFzc3dvcmRsZXNzVmVyaWZ5PWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3ZhciBfdGhpcz10aGlzO3JldHVybiB0aGlzLmNsaWVudC5wYXNzd29yZGxlc3MudmVyaWZ5KG9iamVjdEhlbHBlci5ibGFja2xpc3Qob3B0aW9ucyxbInBvcHVwSGFuZGxlciJdKSxmdW5jdGlvbihlcnIpe2lmKGVycilyZXR1cm4gY2IoZXJyKTtvcHRpb25zLnVzZXJuYW1lPW9wdGlvbnMucGhvbmVOdW1iZXJ8fG9wdGlvbnMuZW1haWwsb3B0aW9ucy5wYXNzd29yZD1vcHRpb25zLnZlcmlmaWNhdGlvbkNvZGUsZGVsZXRlIG9wdGlvbnMuZW1haWwsZGVsZXRlIG9wdGlvbnMucGhvbmVOdW1iZXIsZGVsZXRlIG9wdGlvbnMudmVyaWZpY2F0aW9uQ29kZSxkZWxldGUgb3B0aW9ucy50eXBlLF90aGlzLmNsaWVudC5sb2dpbldpdGhSZXNvdXJjZU93bmVyKG9wdGlvbnMsY2IpfSl9LFBvcHVwLnByb3RvdHlwZS5zaWdudXBBbmRMb2dpbj1mdW5jdGlvbihvcHRpb25zLGNiKXt2YXIgX3RoaXM9dGhpcztyZXR1cm4gdGhpcy5jbGllbnQuZGJDb25uZWN0aW9uLnNpZ251cChvcHRpb25zLGZ1bmN0aW9uKGVycil7aWYoZXJyKXJldHVybiBjYihlcnIpO190aGlzLmxvZ2luV2l0aENyZWRlbnRpYWxzKG9wdGlvbnMsY2IpfSl9LFNpbGVudEF1dGhlbnRpY2F0aW9uSGFuZGxlci5jcmVhdGU9ZnVuY3Rpb24ob3B0aW9ucyl7cmV0dXJuIG5ldyBTaWxlbnRBdXRoZW50aWNhdGlvbkhhbmRsZXIob3B0aW9ucyl9LFNpbGVudEF1dGhlbnRpY2F0aW9uSGFuZGxlci5wcm90b3R5cGUubG9naW49ZnVuY3Rpb24odXNlUG9zdE1lc3NhZ2UsY2FsbGJhY2spe3RoaXMuaGFuZGxlcj1uZXcgSWZyYW1lSGFuZGxlcih7YXV0aDA6dGhpcy5hdXRoMCx1cmw6dGhpcy5hdXRoZW50aWNhdGlvblVybCxldmVudExpc3RlbmVyVHlwZTp1c2VQb3N0TWVzc2FnZT8ibWVzc2FnZSI6ImxvYWQiLGNhbGxiYWNrOnRoaXMuZ2V0Q2FsbGJhY2tIYW5kbGVyKGNhbGxiYWNrLHVzZVBvc3RNZXNzYWdlKSx0aW1lb3V0OnRoaXMudGltZW91dCxldmVudFZhbGlkYXRvcjp0aGlzLmdldEV2ZW50VmFsaWRhdG9yKCksdGltZW91dENhbGxiYWNrOmZ1bmN0aW9uKCl7Y2FsbGJhY2sobnVsbCwiI2Vycm9yPXRpbWVvdXQmZXJyb3JfZGVzY3JpcHRpb249VGltZW91dCtkdXJpbmcrYXV0aGVudGljYXRpb24rcmVuZXcuIil9LHVzZVBvc3RNZXNzYWdlOnVzZVBvc3RNZXNzYWdlfHwhMX0pLHRoaXMuaGFuZGxlci5pbml0KCl9LFNpbGVudEF1dGhlbnRpY2F0aW9uSGFuZGxlci5wcm90b3R5cGUuZ2V0RXZlbnRWYWxpZGF0b3I9ZnVuY3Rpb24oKXt2YXIgX3RoaXM9dGhpcztyZXR1cm57aXNWYWxpZDpmdW5jdGlvbihldmVudERhdGEpe3N3aXRjaChldmVudERhdGEuZXZlbnQudHlwZSl7Y2FzZSJtZXNzYWdlIjpyZXR1cm4gZXZlbnREYXRhLmV2ZW50Lm9yaWdpbj09PV90aGlzLnBvc3RNZXNzYWdlT3JpZ2luJiZldmVudERhdGEuZXZlbnQuc291cmNlPT09X3RoaXMuaGFuZGxlci5pZnJhbWUuY29udGVudFdpbmRvdyYmKCExPT09X3RoaXMucG9zdE1lc3NhZ2VEYXRhVHlwZXx8ZXZlbnREYXRhLmV2ZW50LmRhdGEudHlwZSYmZXZlbnREYXRhLmV2ZW50LmRhdGEudHlwZT09PV90aGlzLnBvc3RNZXNzYWdlRGF0YVR5cGUpO2Nhc2UibG9hZCI6aWYoImFib3V0OiI9PT1ldmVudERhdGEuc291cmNlT2JqZWN0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24ucHJvdG9jb2wpcmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19fX0sU2lsZW50QXV0aGVudGljYXRpb25IYW5kbGVyLnByb3RvdHlwZS5nZXRDYWxsYmFja0hhbmRsZXI9ZnVuY3Rpb24oY2FsbGJhY2ssdXNlUG9zdE1lc3NhZ2Upe3JldHVybiBmdW5jdGlvbihldmVudERhdGEpe3ZhciBjYWxsYmFja1ZhbHVlO2NhbGxiYWNrVmFsdWU9dXNlUG9zdE1lc3NhZ2U/Im9iamVjdCI9PXR5cGVvZiBldmVudERhdGEuZXZlbnQuZGF0YSYmZXZlbnREYXRhLmV2ZW50LmRhdGEuaGFzaD9ldmVudERhdGEuZXZlbnQuZGF0YS5oYXNoOmV2ZW50RGF0YS5ldmVudC5kYXRhOmV2ZW50RGF0YS5zb3VyY2VPYmplY3QuY29udGVudFdpbmRvdy5sb2NhdGlvbi5oYXNoLGNhbGxiYWNrKG51bGwsY2FsbGJhY2tWYWx1ZSl9fSxVc2VybmFtZVBhc3N3b3JkLnByb3RvdHlwZS5sb2dpbj1mdW5jdGlvbihvcHRpb25zLGNiKXt2YXIgdXJsLGJvZHk7cmV0dXJuIHVybD11cmxKb2luKHRoaXMuYmFzZU9wdGlvbnMucm9vdFVybCwidXNlcm5hbWVwYXNzd29yZCIsImxvZ2luIiksb3B0aW9ucy51c2VybmFtZT1vcHRpb25zLnVzZXJuYW1lfHxvcHRpb25zLmVtYWlsLG9wdGlvbnM9b2JqZWN0SGVscGVyLmJsYWNrbGlzdChvcHRpb25zLFsiZW1haWwiXSksYm9keT1vYmplY3RIZWxwZXIubWVyZ2UodGhpcy5iYXNlT3B0aW9ucyxbImNsaWVudElEIiwicmVkaXJlY3RVcmkiLCJ0ZW5hbnQiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZU1vZGUiLCJzY29wZSIsImF1ZGllbmNlIl0pLndpdGgob3B0aW9ucyksYm9keT10aGlzLnRyYW5zYWN0aW9uTWFuYWdlci5wcm9jZXNzKGJvZHkpLGJvZHk9b2JqZWN0SGVscGVyLnRvU25ha2VDYXNlKGJvZHksWyJhdXRoMENsaWVudCJdKSx0aGlzLnJlcXVlc3QucG9zdCh1cmwpLnNlbmQoYm9keSkuZW5kKHdyYXBDYWxsYmFjayhjYikpfSxVc2VybmFtZVBhc3N3b3JkLnByb3RvdHlwZS5jYWxsYmFjaz1mdW5jdGlvbihmb3JtSHRtbCl7dmFyIGRpdixfZG9jdW1lbnQ9d2luZG93SGVscGVyLmdldERvY3VtZW50KCk7KGRpdj1fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1mb3JtSHRtbCxfZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpLmNoaWxkcmVuWzBdLnN1Ym1pdCgpfSxIb3N0ZWRQYWdlcy5wcm90b3R5cGUubG9naW49ZnVuY3Rpb24ob3B0aW9ucyxjYil7aWYod2luZG93SGVscGVyLmdldFdpbmRvdygpLmxvY2F0aW9uLmhvc3QhPT10aGlzLmJhc2VPcHRpb25zLmRvbWFpbil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbWV0aG9kIGlzIG1lYW50IHRvIGJlIHVzZWQgb25seSBpbnNpZGUgdGhlIFVuaXZlcnNhbCBMb2dpbiBQYWdlLiIpO3ZhciB1c2VybmFtZVBhc3N3b3JkLHBhcmFtcz1vYmplY3RIZWxwZXIubWVyZ2UodGhpcy5iYXNlT3B0aW9ucyxbImNsaWVudElEIiwicmVkaXJlY3RVcmkiLCJ0ZW5hbnQiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZU1vZGUiLCJzY29wZSIsImF1ZGllbmNlIiwiX2NzcmYiLCJzdGF0ZSIsIl9pbnRzdGF0ZSIsIm5vbmNlIl0pLndpdGgob3B0aW9ucyk7cmV0dXJuIGFzc2VydC5jaGVjayhwYXJhbXMse3R5cGU6Im9iamVjdCIsbWVzc2FnZToib3B0aW9ucyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0se3Jlc3BvbnNlVHlwZTp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJyZXNwb25zZVR5cGUgb3B0aW9uIGlzIHJlcXVpcmVkIn19KSwodXNlcm5hbWVQYXNzd29yZD1uZXcgVXNlcm5hbWVQYXNzd29yZCh0aGlzLmJhc2VPcHRpb25zKSkubG9naW4ocGFyYW1zLGZ1bmN0aW9uKGVycixkYXRhKXtyZXR1cm4gZXJyP2NiKGVycik6dXNlcm5hbWVQYXNzd29yZC5jYWxsYmFjayhkYXRhKX0pfSxIb3N0ZWRQYWdlcy5wcm90b3R5cGUuc2lnbnVwQW5kTG9naW49ZnVuY3Rpb24ob3B0aW9ucyxjYil7dmFyIF90aGlzPXRoaXM7cmV0dXJuIF90aGlzLmNsaWVudC5jbGllbnQuZGJDb25uZWN0aW9uLnNpZ251cChvcHRpb25zLGZ1bmN0aW9uKGVycil7cmV0dXJuIGVycj9jYihlcnIpOl90aGlzLmxvZ2luKG9wdGlvbnMsY2IpfSl9LEhvc3RlZFBhZ2VzLnByb3RvdHlwZS5nZXRTU09EYXRhPWZ1bmN0aW9uKHdpdGhBY3RpdmVEaXJlY3RvcmllcyxjYil7dmFyIHVybCxwYXJhbXM9IiI7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHdpdGhBY3RpdmVEaXJlY3RvcmllcyYmKGNiPXdpdGhBY3RpdmVEaXJlY3Rvcmllcyx3aXRoQWN0aXZlRGlyZWN0b3JpZXM9ITEpLGFzc2VydC5jaGVjayh3aXRoQWN0aXZlRGlyZWN0b3JpZXMse3R5cGU6ImJvb2xlYW4iLG1lc3NhZ2U6IndpdGhBY3RpdmVEaXJlY3RvcmllcyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0pLGFzc2VydC5jaGVjayhjYix7dHlwZToiZnVuY3Rpb24iLG1lc3NhZ2U6ImNiIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSksd2l0aEFjdGl2ZURpcmVjdG9yaWVzJiYocGFyYW1zPSI/IitsaWJfc3RyaW5naWZ5KHtsZGFwczoxLGNsaWVudF9pZDp0aGlzLmJhc2VPcHRpb25zLmNsaWVudElEfSkpLHVybD11cmxKb2luKHRoaXMuYmFzZU9wdGlvbnMucm9vdFVybCwidXNlciIsInNzb2RhdGEiLHBhcmFtcyksdGhpcy5yZXF1ZXN0LmdldCh1cmwse25vSGVhZGVyczohMH0pLndpdGhDcmVkZW50aWFscygpLmVuZCh3cmFwQ2FsbGJhY2soY2IpKX0sV2ViQXV0aC5wcm90b3R5cGUucGFyc2VIYXNoPWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3ZhciBwYXJzZWRRcyxlcnI7Y2J8fCJmdW5jdGlvbiIhPXR5cGVvZiBvcHRpb25zP29wdGlvbnM9b3B0aW9uc3x8e306KGNiPW9wdGlvbnMsb3B0aW9ucz17fSk7dmFyIF93aW5kb3c9d2luZG93SGVscGVyLmdldFdpbmRvdygpLGhhc2hTdHI9dm9pZCAwPT09b3B0aW9ucy5oYXNoP193aW5kb3cubG9jYXRpb24uaGFzaDpvcHRpb25zLmhhc2g7aWYoaGFzaFN0cj1oYXNoU3RyLnJlcGxhY2UoL14jP1wvPy8sIiIpLChwYXJzZWRRcz1saWJfcGFyc2UoaGFzaFN0cikpLmhhc093blByb3BlcnR5KCJlcnJvciIpKXJldHVybiBlcnI9ZXJyb3IuYnVpbGRSZXNwb25zZShwYXJzZWRRcy5lcnJvcixwYXJzZWRRcy5lcnJvcl9kZXNjcmlwdGlvbikscGFyc2VkUXMuc3RhdGUmJihlcnIuc3RhdGU9cGFyc2VkUXMuc3RhdGUpLGNiKGVycik7aWYoIXBhcnNlZFFzLmhhc093blByb3BlcnR5KCJhY2Nlc3NfdG9rZW4iKSYmIXBhcnNlZFFzLmhhc093blByb3BlcnR5KCJpZF90b2tlbiIpJiYhcGFyc2VkUXMuaGFzT3duUHJvcGVydHkoInJlZnJlc2hfdG9rZW4iKSlyZXR1cm4gY2IobnVsbCxudWxsKTt2YXIgcmVzcG9uc2VUeXBlcz0odGhpcy5iYXNlT3B0aW9ucy5yZXNwb25zZVR5cGV8fG9wdGlvbnMucmVzcG9uc2VUeXBlfHwiIikuc3BsaXQoIiAiKTtyZXR1cm4gcmVzcG9uc2VUeXBlcy5sZW5ndGg+MCYmLTEhPT1yZXNwb25zZVR5cGVzLmluZGV4T2YoInRva2VuIikmJiFwYXJzZWRRcy5oYXNPd25Qcm9wZXJ0eSgiYWNjZXNzX3Rva2VuIik/Y2IoZXJyb3IuYnVpbGRSZXNwb25zZSgiaW52YWxpZF9oYXNoIiwicmVzcG9uc2VfdHlwZSBjb250YWlucyBgdG9rZW5gLCBidXQgdGhlIHBhcnNlZCBoYXNoIGRvZXMgbm90IGNvbnRhaW4gYW4gYGFjY2Vzc190b2tlbmAgcHJvcGVydHkiKSk6cmVzcG9uc2VUeXBlcy5sZW5ndGg+MCYmLTEhPT1yZXNwb25zZVR5cGVzLmluZGV4T2YoImlkX3Rva2VuIikmJiFwYXJzZWRRcy5oYXNPd25Qcm9wZXJ0eSgiaWRfdG9rZW4iKT9jYihlcnJvci5idWlsZFJlc3BvbnNlKCJpbnZhbGlkX2hhc2giLCJyZXNwb25zZV90eXBlIGNvbnRhaW5zIGBpZF90b2tlbmAsIGJ1dCB0aGUgcGFyc2VkIGhhc2ggZG9lcyBub3QgY29udGFpbiBhbiBgaWRfdG9rZW5gIHByb3BlcnR5IikpOnRoaXMudmFsaWRhdGVBdXRoZW50aWNhdGlvblJlc3BvbnNlKG9wdGlvbnMscGFyc2VkUXMsY2IpfSxXZWJBdXRoLnByb3RvdHlwZS52YWxpZGF0ZUF1dGhlbnRpY2F0aW9uUmVzcG9uc2U9ZnVuY3Rpb24ob3B0aW9ucyxwYXJzZWRIYXNoLGNiKXt2YXIgX3RoaXM9dGhpcztvcHRpb25zLl9fZW5hYmxlSWRQSW5pdGlhdGVkTG9naW49b3B0aW9ucy5fX2VuYWJsZUlkUEluaXRpYXRlZExvZ2lufHxvcHRpb25zLl9fZW5hYmxlSW1wZXJzb25hdGlvbjt2YXIgc3RhdGU9cGFyc2VkSGFzaC5zdGF0ZSx0cmFuc2FjdGlvbj10aGlzLnRyYW5zYWN0aW9uTWFuYWdlci5nZXRTdG9yZWRUcmFuc2FjdGlvbihzdGF0ZSksdHJhbnNhY3Rpb25TdGF0ZT1vcHRpb25zLnN0YXRlfHx0cmFuc2FjdGlvbiYmdHJhbnNhY3Rpb24uc3RhdGV8fG51bGwsdHJhbnNhY3Rpb25TdGF0ZU1hdGNoZXNTdGF0ZT10cmFuc2FjdGlvblN0YXRlPT09c3RhdGU7aWYoISghc3RhdGUmJiF0cmFuc2FjdGlvblN0YXRlJiZvcHRpb25zLl9fZW5hYmxlSWRQSW5pdGlhdGVkTG9naW4pJiYhdHJhbnNhY3Rpb25TdGF0ZU1hdGNoZXNTdGF0ZSlyZXR1cm4gY2Ioe2Vycm9yOiJpbnZhbGlkX3Rva2VuIixlcnJvckRlc2NyaXB0aW9uOiJgc3RhdGVgIGRvZXMgbm90IG1hdGNoLiJ9KTt2YXIgdHJhbnNhY3Rpb25Ob25jZT1vcHRpb25zLm5vbmNlfHx0cmFuc2FjdGlvbiYmdHJhbnNhY3Rpb24ubm9uY2V8fG51bGwsYXBwU3RhdGU9b3B0aW9ucy5zdGF0ZXx8dHJhbnNhY3Rpb24mJnRyYW5zYWN0aW9uLmFwcFN0YXRlfHxudWxsLGNhbGxiYWNrPWZ1bmN0aW9uKGVycixwYXlsb2FkKXtpZihlcnIpcmV0dXJuIGNiKGVycik7dmFyIHN1Yjt0cmFuc2FjdGlvbiYmdHJhbnNhY3Rpb24ubGFzdFVzZWRDb25uZWN0aW9uJiYocGF5bG9hZCYmKHN1Yj1wYXlsb2FkLnN1YiksX3RoaXMuc3NvZGF0YVN0b3JhZ2Uuc2V0KHRyYW5zYWN0aW9uLmxhc3RVc2VkQ29ubmVjdGlvbixzdWIpKTtyZXR1cm4gY2IobnVsbCxmdW5jdGlvbihxc1BhcmFtcyxhcHBTdGF0ZSx0b2tlbil7cmV0dXJue2FjY2Vzc1Rva2VuOnFzUGFyYW1zLmFjY2Vzc190b2tlbnx8bnVsbCxpZFRva2VuOnFzUGFyYW1zLmlkX3Rva2VufHxudWxsLGlkVG9rZW5QYXlsb2FkOnRva2VufHxudWxsLGFwcFN0YXRlOmFwcFN0YXRlfHxudWxsLHJlZnJlc2hUb2tlbjpxc1BhcmFtcy5yZWZyZXNoX3Rva2VufHxudWxsLHN0YXRlOnFzUGFyYW1zLnN0YXRlfHxudWxsLGV4cGlyZXNJbjpxc1BhcmFtcy5leHBpcmVzX2luP3BhcnNlSW50KHFzUGFyYW1zLmV4cGlyZXNfaW4sMTApOm51bGwsdG9rZW5UeXBlOnFzUGFyYW1zLnRva2VuX3R5cGV8fG51bGwsc2NvcGU6cXNQYXJhbXMuc2NvcGV8fG51bGx9fShwYXJzZWRIYXNoLGFwcFN0YXRlLHBheWxvYWQpKX07cmV0dXJuIHBhcnNlZEhhc2guaWRfdG9rZW4/dGhpcy52YWxpZGF0ZVRva2VuKHBhcnNlZEhhc2guaWRfdG9rZW4sdHJhbnNhY3Rpb25Ob25jZSxmdW5jdGlvbih2YWxpZGF0aW9uRXJyb3IscGF5bG9hZCl7aWYoIXZhbGlkYXRpb25FcnJvcilyZXR1cm4gcGFyc2VkSGFzaC5hY2Nlc3NfdG9rZW4mJnBheWxvYWQuYXRfaGFzaD8obmV3IEYpLnZhbGlkYXRlQWNjZXNzVG9rZW4ocGFyc2VkSGFzaC5hY2Nlc3NfdG9rZW4sIlJTMjU2IixwYXlsb2FkLmF0X2hhc2gsZnVuY3Rpb24oZXJyKXtyZXR1cm4gZXJyP2NhbGxiYWNrKGVycm9yLmludmFsaWRUb2tlbihlcnIubWVzc2FnZSkpOmNhbGxiYWNrKG51bGwscGF5bG9hZCl9KTpjYWxsYmFjayhudWxsLHBheWxvYWQpO2lmKCJpbnZhbGlkX3Rva2VuIiE9PXZhbGlkYXRpb25FcnJvci5lcnJvcnx8Ik5vbmNlIGRvZXMgbm90IG1hdGNoLiI9PT12YWxpZGF0aW9uRXJyb3IuZXJyb3JEZXNjcmlwdGlvbilyZXR1cm4gY2FsbGJhY2sodmFsaWRhdGlvbkVycm9yKTt2YXIgZGVjb2RlZFRva2VuPShuZXcgRikuZGVjb2RlKHBhcnNlZEhhc2guaWRfdG9rZW4pO2lmKCJIUzI1NiIhPT1kZWNvZGVkVG9rZW4uaGVhZGVyLmFsZylyZXR1cm4gY2FsbGJhY2sodmFsaWRhdGlvbkVycm9yKTtpZigoZGVjb2RlZFRva2VuLnBheWxvYWQubm9uY2V8fG51bGwpIT09dHJhbnNhY3Rpb25Ob25jZSlyZXR1cm4gY2FsbGJhY2soe2Vycm9yOiJpbnZhbGlkX3Rva2VuIixlcnJvckRlc2NyaXB0aW9uOiJOb25jZSBkb2VzIG5vdCBtYXRjaC4ifSk7aWYoIXBhcnNlZEhhc2guYWNjZXNzX3Rva2VuKXtyZXR1cm4gY2FsbGJhY2soe2Vycm9yOiJpbnZhbGlkX3Rva2VuIixkZXNjcmlwdGlvbjoiVGhlIGlkX3Rva2VuIGNhbm5vdCBiZSB2YWxpZGF0ZWQgYmVjYXVzZSBpdCB3YXMgc2lnbmVkIHdpdGggdGhlIEhTMjU2IGFsZ29yaXRobSBhbmQgcHVibGljIGNsaWVudHMgKGxpa2UgYSBicm93c2VyKSBjYW7igJl0IHN0b3JlIHNlY3JldHMuIFBsZWFzZSByZWFkIHRoZSBhc3NvY2lhdGVkIGRvYyBmb3IgcG9zc2libGUgd2F5cyB0byBmaXggdGhpcy4gUmVhZCBtb3JlOiBodHRwczovL2F1dGgwLmNvbS9kb2NzL2Vycm9ycy9saWJyYXJpZXMvYXV0aDAtanMvaW52YWxpZC10b2tlbiNwYXJzaW5nLWFuLWhzMjU2LXNpZ25lZC1pZC10b2tlbi13aXRob3V0LWFuLWFjY2Vzcy10b2tlbiJ9KX1yZXR1cm4gX3RoaXMuY2xpZW50LnVzZXJJbmZvKHBhcnNlZEhhc2guYWNjZXNzX3Rva2VuLGZ1bmN0aW9uKGVyclVzZXJJbmZvLHByb2ZpbGUpe3JldHVybiBlcnJVc2VySW5mbz9jYWxsYmFjayhlcnJVc2VySW5mbyk6Y2FsbGJhY2sobnVsbCxwcm9maWxlKX0pfSk6Y2FsbGJhY2sobnVsbCxudWxsKX0sV2ViQXV0aC5wcm90b3R5cGUudmFsaWRhdGVUb2tlbj1mdW5jdGlvbih0b2tlbixub25jZSxjYil7bmV3IEYoe2lzc3Vlcjp0aGlzLmJhc2VPcHRpb25zLnRva2VuX2lzc3Vlcixqd2tzVVJJOnRoaXMuYmFzZU9wdGlvbnMuandrc1VSSSxhdWRpZW5jZTp0aGlzLmJhc2VPcHRpb25zLmNsaWVudElELGxlZXdheTp0aGlzLmJhc2VPcHRpb25zLmxlZXdheXx8MCxfX2Rpc2FibGVFeHBpcmF0aW9uQ2hlY2s6dGhpcy5iYXNlT3B0aW9ucy5fX2Rpc2FibGVFeHBpcmF0aW9uQ2hlY2t9KS52ZXJpZnkodG9rZW4sbm9uY2UsZnVuY3Rpb24oZXJyLHBheWxvYWQpe2lmKGVycilyZXR1cm4gY2IoZXJyb3IuaW52YWxpZFRva2VuKGVyci5tZXNzYWdlKSk7Y2IobnVsbCxwYXlsb2FkKX0pfSxXZWJBdXRoLnByb3RvdHlwZS5yZW5ld0F1dGg9ZnVuY3Rpb24ob3B0aW9ucyxjYil7dmFyIHVzZVBvc3RNZXNzYWdlPSEhb3B0aW9ucy51c2VQb3N0TWVzc2FnZSxwb3N0TWVzc2FnZURhdGFUeXBlPW9wdGlvbnMucG9zdE1lc3NhZ2VEYXRhVHlwZXx8ITEscG9zdE1lc3NhZ2VPcmlnaW49b3B0aW9ucy5wb3N0TWVzc2FnZU9yaWdpbnx8d2luZG93SGVscGVyLmdldFdpbmRvdygpLm9yaWdpbix0aW1lb3V0PW9wdGlvbnMudGltZW91dCxfdGhpcz10aGlzLHBhcmFtcz1vYmplY3RIZWxwZXIubWVyZ2UodGhpcy5iYXNlT3B0aW9ucyxbImNsaWVudElEIiwicmVkaXJlY3RVcmkiLCJyZXNwb25zZVR5cGUiLCJzY29wZSIsImF1ZGllbmNlIiwiX2NzcmYiLCJzdGF0ZSIsIl9pbnRzdGF0ZSIsIm5vbmNlIl0pLndpdGgob3B0aW9ucyk7cGFyYW1zLnJlc3BvbnNlVHlwZT1wYXJhbXMucmVzcG9uc2VUeXBlfHwidG9rZW4iLHBhcmFtcy5yZXNwb25zZU1vZGU9cGFyYW1zLnJlc3BvbnNlTW9kZXx8ImZyYWdtZW50IixwYXJhbXM9dGhpcy50cmFuc2FjdGlvbk1hbmFnZXIucHJvY2VzcyhwYXJhbXMpLGFzc2VydC5jaGVjayhwYXJhbXMse3R5cGU6Im9iamVjdCIsbWVzc2FnZToib3B0aW9ucyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0pLGFzc2VydC5jaGVjayhjYix7dHlwZToiZnVuY3Rpb24iLG1lc3NhZ2U6ImNiIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSkscGFyYW1zLnByb21wdD0ibm9uZSIscGFyYW1zPW9iamVjdEhlbHBlci5ibGFja2xpc3QocGFyYW1zLFsidXNlUG9zdE1lc3NhZ2UiLCJ0ZW5hbnQiLCJwb3N0TWVzc2FnZURhdGFUeXBlIiwicG9zdE1lc3NhZ2VPcmlnaW4iXSksU2lsZW50QXV0aGVudGljYXRpb25IYW5kbGVyLmNyZWF0ZSh7YXV0aGVudGljYXRpb25Vcmw6dGhpcy5jbGllbnQuYnVpbGRBdXRob3JpemVVcmwocGFyYW1zKSxwb3N0TWVzc2FnZURhdGFUeXBlOnBvc3RNZXNzYWdlRGF0YVR5cGUscG9zdE1lc3NhZ2VPcmlnaW46cG9zdE1lc3NhZ2VPcmlnaW4sdGltZW91dDp0aW1lb3V0fSkubG9naW4odXNlUG9zdE1lc3NhZ2UsZnVuY3Rpb24oZXJyLGhhc2gpe2lmKCJvYmplY3QiPT10eXBlb2YgaGFzaClyZXR1cm4gY2IoZXJyLGhhc2gpO190aGlzLnBhcnNlSGFzaCh7aGFzaDpoYXNofSxjYil9KX0sV2ViQXV0aC5wcm90b3R5cGUuY2hlY2tTZXNzaW9uPWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3ZhciBwYXJhbXM9b2JqZWN0SGVscGVyLm1lcmdlKHRoaXMuYmFzZU9wdGlvbnMsWyJjbGllbnRJRCIsInJlc3BvbnNlVHlwZSIsInJlZGlyZWN0VXJpIiwic2NvcGUiLCJhdWRpZW5jZSIsIl9jc3JmIiwic3RhdGUiLCJfaW50c3RhdGUiLCJub25jZSJdKS53aXRoKG9wdGlvbnMpO3JldHVybiJjb2RlIj09PXBhcmFtcy5yZXNwb25zZVR5cGU/Y2Ioe2Vycm9yOiJlcnJvciIsZXJyb3JfZGVzY3JpcHRpb246InJlc3BvbnNlVHlwZSBjYW4ndCBiZSBgY29kZWAifSk6KG9wdGlvbnMubm9uY2V8fChwYXJhbXM9dGhpcy50cmFuc2FjdGlvbk1hbmFnZXIucHJvY2VzcyhwYXJhbXMpKSxwYXJhbXMucmVkaXJlY3RVcmk/KGFzc2VydC5jaGVjayhwYXJhbXMse3R5cGU6Im9iamVjdCIsbWVzc2FnZToib3B0aW9ucyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0pLGFzc2VydC5jaGVjayhjYix7dHlwZToiZnVuY3Rpb24iLG1lc3NhZ2U6ImNiIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSkscGFyYW1zPW9iamVjdEhlbHBlci5ibGFja2xpc3QocGFyYW1zLFsidXNlUG9zdE1lc3NhZ2UiLCJ0ZW5hbnQiLCJwb3N0TWVzc2FnZURhdGFUeXBlIl0pLHZvaWQgdGhpcy53ZWJNZXNzYWdlSGFuZGxlci5ydW4ocGFyYW1zLHdyYXBDYWxsYmFjayhjYix7Zm9yY2VMZWdhY3lFcnJvcjohMCxpZ25vcmVDYXNpbmc6ITB9KSkpOmNiKHtlcnJvcjoiZXJyb3IiLGVycm9yX2Rlc2NyaXB0aW9uOiJyZWRpcmVjdFVyaSBjYW4ndCBiZSBlbXB0eSJ9KSl9LFdlYkF1dGgucHJvdG90eXBlLmNoYW5nZVBhc3N3b3JkPWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3JldHVybiB0aGlzLmNsaWVudC5kYkNvbm5lY3Rpb24uY2hhbmdlUGFzc3dvcmQob3B0aW9ucyxjYil9LFdlYkF1dGgucHJvdG90eXBlLnBhc3N3b3JkbGVzc1N0YXJ0PWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3ZhciBhdXRoUGFyYW1zPW9iamVjdEhlbHBlci5tZXJnZSh0aGlzLmJhc2VPcHRpb25zLFsicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VNb2RlIiwicmVkaXJlY3RVcmkiLCJzY29wZSIsImF1ZGllbmNlIiwiX2NzcmYiLCJzdGF0ZSIsIl9pbnRzdGF0ZSIsIm5vbmNlIl0pLndpdGgob3B0aW9ucy5hdXRoUGFyYW1zKTtyZXR1cm4gb3B0aW9ucy5hdXRoUGFyYW1zPXRoaXMudHJhbnNhY3Rpb25NYW5hZ2VyLnByb2Nlc3MoYXV0aFBhcmFtcyksdGhpcy5jbGllbnQucGFzc3dvcmRsZXNzLnN0YXJ0KG9wdGlvbnMsY2IpfSxXZWJBdXRoLnByb3RvdHlwZS5zaWdudXA9ZnVuY3Rpb24ob3B0aW9ucyxjYil7cmV0dXJuIHRoaXMuY2xpZW50LmRiQ29ubmVjdGlvbi5zaWdudXAob3B0aW9ucyxjYil9LFdlYkF1dGgucHJvdG90eXBlLmF1dGhvcml6ZT1mdW5jdGlvbihvcHRpb25zKXt2YXIgcGFyYW1zPW9iamVjdEhlbHBlci5tZXJnZSh0aGlzLmJhc2VPcHRpb25zLFsiY2xpZW50SUQiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZU1vZGUiLCJyZWRpcmVjdFVyaSIsInNjb3BlIiwiYXVkaWVuY2UiLCJfY3NyZiIsInN0YXRlIiwiX2ludHN0YXRlIiwibm9uY2UiXSkud2l0aChvcHRpb25zKTthc3NlcnQuY2hlY2socGFyYW1zLHt0eXBlOiJvYmplY3QiLG1lc3NhZ2U6Im9wdGlvbnMgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCJ9LHtyZXNwb25zZVR5cGU6e3R5cGU6InN0cmluZyIsbWVzc2FnZToicmVzcG9uc2VUeXBlIG9wdGlvbiBpcyByZXF1aXJlZCJ9fSksKHBhcmFtcz10aGlzLnRyYW5zYWN0aW9uTWFuYWdlci5wcm9jZXNzKHBhcmFtcykpLnNjb3BlPXBhcmFtcy5zY29wZXx8Im9wZW5pZCBwcm9maWxlIGVtYWlsIix3aW5kb3dIZWxwZXIucmVkaXJlY3QodGhpcy5jbGllbnQuYnVpbGRBdXRob3JpemVVcmwocGFyYW1zKSl9LFdlYkF1dGgucHJvdG90eXBlLnNpZ251cEFuZEF1dGhvcml6ZT1mdW5jdGlvbihvcHRpb25zLGNiKXt2YXIgX3RoaXM9dGhpcztyZXR1cm4gdGhpcy5jbGllbnQuZGJDb25uZWN0aW9uLnNpZ251cChvYmplY3RIZWxwZXIuYmxhY2tsaXN0KG9wdGlvbnMsWyJwb3B1cEhhbmRsZXIiXSksZnVuY3Rpb24oZXJyKXtpZihlcnIpcmV0dXJuIGNiKGVycik7b3B0aW9ucy5yZWFsbT1vcHRpb25zLmNvbm5lY3Rpb24sb3B0aW9ucy51c2VybmFtZXx8KG9wdGlvbnMudXNlcm5hbWU9b3B0aW9ucy5lbWFpbCksX3RoaXMuY2xpZW50LmxvZ2luKG9wdGlvbnMsY2IpfSl9LFdlYkF1dGgucHJvdG90eXBlLmxvZ2luPWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3ZhciBwYXJhbXM9b2JqZWN0SGVscGVyLm1lcmdlKHRoaXMuYmFzZU9wdGlvbnMsWyJjbGllbnRJRCIsInJlc3BvbnNlVHlwZSIsInJlZGlyZWN0VXJpIiwic2NvcGUiLCJhdWRpZW5jZSIsIl9jc3JmIiwic3RhdGUiLCJfaW50c3RhdGUiLCJub25jZSJdKS53aXRoKG9wdGlvbnMpO3BhcmFtcz10aGlzLnRyYW5zYWN0aW9uTWFuYWdlci5wcm9jZXNzKHBhcmFtcyksd2luZG93SGVscGVyLmdldFdpbmRvdygpLmxvY2F0aW9uLmhvc3Q9PT10aGlzLmJhc2VPcHRpb25zLmRvbWFpbj8ocGFyYW1zLmNvbm5lY3Rpb249cGFyYW1zLnJlYWxtLGRlbGV0ZSBwYXJhbXMucmVhbG0sdGhpcy5fdW5pdmVyc2FsTG9naW4ubG9naW4ocGFyYW1zLGNiKSk6dGhpcy5jcm9zc09yaWdpbkF1dGhlbnRpY2F0aW9uLmxvZ2luKHBhcmFtcyxjYil9LFdlYkF1dGgucHJvdG90eXBlLnBhc3N3b3JkbGVzc0xvZ2luPWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3ZhciBwYXJhbXM9b2JqZWN0SGVscGVyLm1lcmdlKHRoaXMuYmFzZU9wdGlvbnMsWyJjbGllbnRJRCIsInJlc3BvbnNlVHlwZSIsInJlZGlyZWN0VXJpIiwic2NvcGUiLCJhdWRpZW5jZSIsIl9jc3JmIiwic3RhdGUiLCJfaW50c3RhdGUiLCJub25jZSJdKS53aXRoKG9wdGlvbnMpO2lmKHBhcmFtcz10aGlzLnRyYW5zYWN0aW9uTWFuYWdlci5wcm9jZXNzKHBhcmFtcyksd2luZG93SGVscGVyLmdldFdpbmRvdygpLmxvY2F0aW9uLmhvc3Q9PT10aGlzLmJhc2VPcHRpb25zLmRvbWFpbil0aGlzLnBhc3N3b3JkbGVzc1ZlcmlmeShwYXJhbXMsY2IpO2Vsc2V7dmFyIGNyb3NzT3JpZ2luT3B0aW9ucz1vYmplY3RIZWxwZXIuZXh0ZW5kKHtjcmVkZW50aWFsVHlwZToiaHR0cDovL2F1dGgwLmNvbS9vYXV0aC9ncmFudC10eXBlL3Bhc3N3b3JkbGVzcy9vdHAiLHJlYWxtOnBhcmFtcy5jb25uZWN0aW9uLHVzZXJuYW1lOnBhcmFtcy5lbWFpbHx8cGFyYW1zLnBob25lTnVtYmVyLG90cDpwYXJhbXMudmVyaWZpY2F0aW9uQ29kZX0sb2JqZWN0SGVscGVyLmJsYWNrbGlzdChwYXJhbXMsWyJjb25uZWN0aW9uIiwiZW1haWwiLCJwaG9uZU51bWJlciIsInZlcmlmaWNhdGlvbkNvZGUiXSkpO3RoaXMuY3Jvc3NPcmlnaW5BdXRoZW50aWNhdGlvbi5sb2dpbihjcm9zc09yaWdpbk9wdGlvbnMsY2IpfX0sV2ViQXV0aC5wcm90b3R5cGUuY3Jvc3NPcmlnaW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5jcm9zc09yaWdpblZlcmlmaWNhdGlvbigpfSxXZWJBdXRoLnByb3RvdHlwZS5jcm9zc09yaWdpblZlcmlmaWNhdGlvbj1mdW5jdGlvbigpe3RoaXMuY3Jvc3NPcmlnaW5BdXRoZW50aWNhdGlvbi5jYWxsYmFjaygpfSxXZWJBdXRoLnByb3RvdHlwZS5sb2dvdXQ9ZnVuY3Rpb24ob3B0aW9ucyl7d2luZG93SGVscGVyLnJlZGlyZWN0KHRoaXMuY2xpZW50LmJ1aWxkTG9nb3V0VXJsKG9wdGlvbnMpKX0sV2ViQXV0aC5wcm90b3R5cGUucGFzc3dvcmRsZXNzVmVyaWZ5PWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3ZhciBfdGhpcz10aGlzLHBhcmFtcz1vYmplY3RIZWxwZXIubWVyZ2UodGhpcy5iYXNlT3B0aW9ucyxbImNsaWVudElEIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VNb2RlIiwicmVkaXJlY3RVcmkiLCJzY29wZSIsImF1ZGllbmNlIiwiX2NzcmYiLCJzdGF0ZSIsIl9pbnRzdGF0ZSIsIm5vbmNlIl0pLndpdGgob3B0aW9ucyk7cmV0dXJuIGFzc2VydC5jaGVjayhwYXJhbXMse3R5cGU6Im9iamVjdCIsbWVzc2FnZToib3B0aW9ucyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0se3Jlc3BvbnNlVHlwZTp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJyZXNwb25zZVR5cGUgb3B0aW9uIGlzIHJlcXVpcmVkIn19KSxwYXJhbXM9dGhpcy50cmFuc2FjdGlvbk1hbmFnZXIucHJvY2VzcyhwYXJhbXMpLHRoaXMuY2xpZW50LnBhc3N3b3JkbGVzcy52ZXJpZnkocGFyYW1zLGZ1bmN0aW9uKGVycil7cmV0dXJuIGVycj9jYihlcnIpOndpbmRvd0hlbHBlci5yZWRpcmVjdChfdGhpcy5jbGllbnQucGFzc3dvcmRsZXNzLmJ1aWxkVmVyaWZ5VXJsKHBhcmFtcykpfSl9LFBhc3N3b3JkbGVzc0F1dGhlbnRpY2F0aW9uLnByb3RvdHlwZS5idWlsZFZlcmlmeVVybD1mdW5jdGlvbihvcHRpb25zKXt2YXIgcGFyYW1zLHFTdHJpbmc7cmV0dXJuIGFzc2VydC5jaGVjayhvcHRpb25zLHt0eXBlOiJvYmplY3QiLG1lc3NhZ2U6Im9wdGlvbnMgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCJ9LHtjb25uZWN0aW9uOnt0eXBlOiJzdHJpbmciLG1lc3NhZ2U6ImNvbm5lY3Rpb24gb3B0aW9uIGlzIHJlcXVpcmVkIn0sdmVyaWZpY2F0aW9uQ29kZTp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJ2ZXJpZmljYXRpb25Db2RlIG9wdGlvbiBpcyByZXF1aXJlZCJ9LHBob25lTnVtYmVyOntvcHRpb25hbDohMSx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6InBob25lTnVtYmVyIG9wdGlvbiBpcyByZXF1aXJlZCIsY29uZGl0aW9uOmZ1bmN0aW9uKG8pe3JldHVybiFvLmVtYWlsfX0sZW1haWw6e29wdGlvbmFsOiExLHR5cGU6InN0cmluZyIsbWVzc2FnZToiZW1haWwgb3B0aW9uIGlzIHJlcXVpcmVkIixjb25kaXRpb246ZnVuY3Rpb24obyl7cmV0dXJuIW8ucGhvbmVOdW1iZXJ9fX0pLHBhcmFtcz1vYmplY3RIZWxwZXIubWVyZ2UodGhpcy5iYXNlT3B0aW9ucyxbImNsaWVudElEIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VNb2RlIiwicmVkaXJlY3RVcmkiLCJzY29wZSIsImF1ZGllbmNlIiwiX2NzcmYiLCJzdGF0ZSIsIl9pbnRzdGF0ZSIsInByb3RvY29sIiwibm9uY2UiXSkud2l0aChvcHRpb25zKSx0aGlzLmJhc2VPcHRpb25zLl9zZW5kVGVsZW1ldHJ5JiYocGFyYW1zLmF1dGgwQ2xpZW50PXRoaXMucmVxdWVzdC5nZXRUZWxlbWV0cnlEYXRhKCkpLHBhcmFtcz1vYmplY3RIZWxwZXIudG9TbmFrZUNhc2UocGFyYW1zLFsiYXV0aDBDbGllbnQiXSkscVN0cmluZz1saWJfc3RyaW5naWZ5KHBhcmFtcyksdXJsSm9pbih0aGlzLmJhc2VPcHRpb25zLnJvb3RVcmwsInBhc3N3b3JkbGVzcyIsInZlcmlmeV9yZWRpcmVjdCIsIj8iK3FTdHJpbmcpfSxQYXNzd29yZGxlc3NBdXRoZW50aWNhdGlvbi5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24ob3B0aW9ucyxjYil7dmFyIHVybCxib2R5O3JldHVybiBhc3NlcnQuY2hlY2sob3B0aW9ucyx7dHlwZToib2JqZWN0IixtZXNzYWdlOiJvcHRpb25zIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSx7Y29ubmVjdGlvbjp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJjb25uZWN0aW9uIG9wdGlvbiBpcyByZXF1aXJlZCJ9LHNlbmQ6e3R5cGU6InN0cmluZyIsbWVzc2FnZToic2VuZCBvcHRpb24gaXMgcmVxdWlyZWQiLHZhbHVlczpbImxpbmsiLCJjb2RlIl0sdmFsdWVfbWVzc2FnZToic2VuZCBpcyBub3QgdmFsaWQgKFtsaW5rLCBjb2RlXSkifSxwaG9uZU51bWJlcjp7b3B0aW9uYWw6ITAsdHlwZToic3RyaW5nIixtZXNzYWdlOiJwaG9uZU51bWJlciBvcHRpb24gaXMgcmVxdWlyZWQiLGNvbmRpdGlvbjpmdW5jdGlvbihvKXtyZXR1cm4iY29kZSI9PT1vLnNlbmR8fCFvLmVtYWlsfX0sZW1haWw6e29wdGlvbmFsOiEwLHR5cGU6InN0cmluZyIsbWVzc2FnZToiZW1haWwgb3B0aW9uIGlzIHJlcXVpcmVkIixjb25kaXRpb246ZnVuY3Rpb24obyl7cmV0dXJuImxpbmsiPT09by5zZW5kfHwhby5waG9uZU51bWJlcn19LGF1dGhQYXJhbXM6e29wdGlvbmFsOiEwLHR5cGU6Im9iamVjdCIsbWVzc2FnZToiYXV0aFBhcmFtcyBvcHRpb24gaXMgcmVxdWlyZWQifX0pLGFzc2VydC5jaGVjayhjYix7dHlwZToiZnVuY3Rpb24iLG1lc3NhZ2U6ImNiIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSksdXJsPXVybEpvaW4odGhpcy5iYXNlT3B0aW9ucy5yb290VXJsLCJwYXNzd29yZGxlc3MiLCJzdGFydCIpLChib2R5PW9iamVjdEhlbHBlci5tZXJnZSh0aGlzLmJhc2VPcHRpb25zLFsiY2xpZW50SUQiLCJyZXNwb25zZVR5cGUiLCJyZWRpcmVjdFVyaSIsInNjb3BlIl0pLndpdGgob3B0aW9ucykpLnNjb3BlJiYoYm9keS5hdXRoUGFyYW1zPWJvZHkuYXV0aFBhcmFtc3x8e30sYm9keS5hdXRoUGFyYW1zLnNjb3BlPWJvZHkuc2NvcGUpLGJvZHkucmVkaXJlY3RVcmkmJihib2R5LmF1dGhQYXJhbXM9Ym9keS5hdXRoUGFyYW1zfHx7fSxib2R5LmF1dGhQYXJhbXMucmVkaXJlY3RfdXJpPWJvZHkucmVkaXJlY3RVcmkpLGJvZHkucmVzcG9uc2VUeXBlJiYoYm9keS5hdXRoUGFyYW1zPWJvZHkuYXV0aFBhcmFtc3x8e30sYm9keS5hdXRoUGFyYW1zLnJlc3BvbnNlX3R5cGU9Ym9keS5yZXNwb25zZVR5cGUpLGRlbGV0ZSBib2R5LnJlZGlyZWN0VXJpLGRlbGV0ZSBib2R5LnJlc3BvbnNlVHlwZSxkZWxldGUgYm9keS5zY29wZSxib2R5PW9iamVjdEhlbHBlci50b1NuYWtlQ2FzZShib2R5LFsiYXV0aDBDbGllbnQiLCJhdXRoUGFyYW1zIl0pLHRoaXMucmVxdWVzdC5wb3N0KHVybCkuc2VuZChib2R5KS5lbmQod3JhcENhbGxiYWNrKGNiKSl9LFBhc3N3b3JkbGVzc0F1dGhlbnRpY2F0aW9uLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24ob3B0aW9ucyxjYil7dmFyIHVybCxjbGVhbk9wdGlvbjtyZXR1cm4gYXNzZXJ0LmNoZWNrKG9wdGlvbnMse3R5cGU6Im9iamVjdCIsbWVzc2FnZToib3B0aW9ucyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0se2Nvbm5lY3Rpb246e3R5cGU6InN0cmluZyIsbWVzc2FnZToiY29ubmVjdGlvbiBvcHRpb24gaXMgcmVxdWlyZWQifSx2ZXJpZmljYXRpb25Db2RlOnt0eXBlOiJzdHJpbmciLG1lc3NhZ2U6InZlcmlmaWNhdGlvbkNvZGUgb3B0aW9uIGlzIHJlcXVpcmVkIn0scGhvbmVOdW1iZXI6e29wdGlvbmFsOiExLHR5cGU6InN0cmluZyIsbWVzc2FnZToicGhvbmVOdW1iZXIgb3B0aW9uIGlzIHJlcXVpcmVkIixjb25kaXRpb246ZnVuY3Rpb24obyl7cmV0dXJuIW8uZW1haWx9fSxlbWFpbDp7b3B0aW9uYWw6ITEsdHlwZToic3RyaW5nIixtZXNzYWdlOiJlbWFpbCBvcHRpb24gaXMgcmVxdWlyZWQiLGNvbmRpdGlvbjpmdW5jdGlvbihvKXtyZXR1cm4hby5waG9uZU51bWJlcn19fSksYXNzZXJ0LmNoZWNrKGNiLHt0eXBlOiJmdW5jdGlvbiIsbWVzc2FnZToiY2IgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCJ9KSxjbGVhbk9wdGlvbj1vYmplY3RIZWxwZXIucGljayhvcHRpb25zLFsiY29ubmVjdGlvbiIsInZlcmlmaWNhdGlvbkNvZGUiLCJwaG9uZU51bWJlciIsImVtYWlsIiwiYXV0aDBDbGllbnQiXSksY2xlYW5PcHRpb249b2JqZWN0SGVscGVyLnRvU25ha2VDYXNlKGNsZWFuT3B0aW9uLFsiYXV0aDBDbGllbnQiXSksdXJsPXVybEpvaW4odGhpcy5iYXNlT3B0aW9ucy5yb290VXJsLCJwYXNzd29yZGxlc3MiLCJ2ZXJpZnkiKSx0aGlzLnJlcXVlc3QucG9zdCh1cmwpLnNlbmQoY2xlYW5PcHRpb24pLmVuZCh3cmFwQ2FsbGJhY2soY2IpKX0sREJDb25uZWN0aW9uLnByb3RvdHlwZS5zaWdudXA9ZnVuY3Rpb24ob3B0aW9ucyxjYil7dmFyIHVybCxib2R5LG1ldGFkYXRhO3JldHVybiBhc3NlcnQuY2hlY2sob3B0aW9ucyx7dHlwZToib2JqZWN0IixtZXNzYWdlOiJvcHRpb25zIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSx7Y29ubmVjdGlvbjp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJjb25uZWN0aW9uIG9wdGlvbiBpcyByZXF1aXJlZCJ9LGVtYWlsOnt0eXBlOiJzdHJpbmciLG1lc3NhZ2U6ImVtYWlsIG9wdGlvbiBpcyByZXF1aXJlZCJ9LHBhc3N3b3JkOnt0eXBlOiJzdHJpbmciLG1lc3NhZ2U6InBhc3N3b3JkIG9wdGlvbiBpcyByZXF1aXJlZCJ9fSksYXNzZXJ0LmNoZWNrKGNiLHt0eXBlOiJmdW5jdGlvbiIsbWVzc2FnZToiY2IgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCJ9KSx1cmw9dXJsSm9pbih0aGlzLmJhc2VPcHRpb25zLnJvb3RVcmwsImRiY29ubmVjdGlvbnMiLCJzaWdudXAiKSxtZXRhZGF0YT0oYm9keT1vYmplY3RIZWxwZXIubWVyZ2UodGhpcy5iYXNlT3B0aW9ucyxbImNsaWVudElEIl0pLndpdGgob3B0aW9ucykpLnVzZXJfbWV0YWRhdGF8fGJvZHkudXNlck1ldGFkYXRhLGJvZHk9b2JqZWN0SGVscGVyLmJsYWNrbGlzdChib2R5LFsic2NvcGUiLCJ1c2VyTWV0YWRhdGEiLCJ1c2VyX21ldGFkYXRhIl0pLGJvZHk9b2JqZWN0SGVscGVyLnRvU25ha2VDYXNlKGJvZHksWyJhdXRoMENsaWVudCJdKSxtZXRhZGF0YSYmKGJvZHkudXNlcl9tZXRhZGF0YT1tZXRhZGF0YSksdGhpcy5yZXF1ZXN0LnBvc3QodXJsKS5zZW5kKGJvZHkpLmVuZCh3cmFwQ2FsbGJhY2soY2IpKX0sREJDb25uZWN0aW9uLnByb3RvdHlwZS5jaGFuZ2VQYXNzd29yZD1mdW5jdGlvbihvcHRpb25zLGNiKXt2YXIgdXJsLGJvZHk7cmV0dXJuIGFzc2VydC5jaGVjayhvcHRpb25zLHt0eXBlOiJvYmplY3QiLG1lc3NhZ2U6Im9wdGlvbnMgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCJ9LHtjb25uZWN0aW9uOnt0eXBlOiJzdHJpbmciLG1lc3NhZ2U6ImNvbm5lY3Rpb24gb3B0aW9uIGlzIHJlcXVpcmVkIn0sZW1haWw6e3R5cGU6InN0cmluZyIsbWVzc2FnZToiZW1haWwgb3B0aW9uIGlzIHJlcXVpcmVkIn19KSxhc3NlcnQuY2hlY2soY2Ise3R5cGU6ImZ1bmN0aW9uIixtZXNzYWdlOiJjYiBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0pLHVybD11cmxKb2luKHRoaXMuYmFzZU9wdGlvbnMucm9vdFVybCwiZGJjb25uZWN0aW9ucyIsImNoYW5nZV9wYXNzd29yZCIpLGJvZHk9b2JqZWN0SGVscGVyLm1lcmdlKHRoaXMuYmFzZU9wdGlvbnMsWyJjbGllbnRJRCJdKS53aXRoKG9wdGlvbnMsWyJlbWFpbCIsImNvbm5lY3Rpb24iXSksYm9keT1vYmplY3RIZWxwZXIudG9TbmFrZUNhc2UoYm9keSxbImF1dGgwQ2xpZW50Il0pLHRoaXMucmVxdWVzdC5wb3N0KHVybCkuc2VuZChib2R5KS5lbmQod3JhcENhbGxiYWNrKGNiKSl9LEF1dGhlbnRpY2F0aW9uLnByb3RvdHlwZS5idWlsZEF1dGhvcml6ZVVybD1mdW5jdGlvbihvcHRpb25zKXt2YXIgcGFyYW1zLHFTdHJpbmc7cmV0dXJuIGFzc2VydC5jaGVjayhvcHRpb25zLHt0eXBlOiJvYmplY3QiLG1lc3NhZ2U6Im9wdGlvbnMgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCJ9KSxwYXJhbXM9b2JqZWN0SGVscGVyLm1lcmdlKHRoaXMuYmFzZU9wdGlvbnMsWyJjbGllbnRJRCIsInJlc3BvbnNlVHlwZSIsInJlc3BvbnNlTW9kZSIsInJlZGlyZWN0VXJpIiwic2NvcGUiLCJhdWRpZW5jZSJdKS53aXRoKG9wdGlvbnMpLGFzc2VydC5jaGVjayhwYXJhbXMse3R5cGU6Im9iamVjdCIsbWVzc2FnZToib3B0aW9ucyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0se2NsaWVudElEOnt0eXBlOiJzdHJpbmciLG1lc3NhZ2U6ImNsaWVudElEIG9wdGlvbiBpcyByZXF1aXJlZCJ9LHJlZGlyZWN0VXJpOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6InJlZGlyZWN0VXJpIG9wdGlvbiBpcyByZXF1aXJlZCJ9LHJlc3BvbnNlVHlwZTp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJyZXNwb25zZVR5cGUgb3B0aW9uIGlzIHJlcXVpcmVkIn0sbm9uY2U6e3R5cGU6InN0cmluZyIsbWVzc2FnZToibm9uY2Ugb3B0aW9uIGlzIHJlcXVpcmVkIixjb25kaXRpb246ZnVuY3Rpb24obyl7cmV0dXJuLTE9PT1vLnJlc3BvbnNlVHlwZS5pbmRleE9mKCJjb2RlIikmJi0xIT09by5yZXNwb25zZVR5cGUuaW5kZXhPZigiaWRfdG9rZW4iKX19LHNjb3BlOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6InNjb3BlIG9wdGlvbiBpcyByZXF1aXJlZCJ9LGF1ZGllbmNlOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6ImF1ZGllbmNlIG9wdGlvbiBpcyByZXF1aXJlZCJ9fSksdGhpcy5iYXNlT3B0aW9ucy5fc2VuZFRlbGVtZXRyeSYmKHBhcmFtcy5hdXRoMENsaWVudD10aGlzLnJlcXVlc3QuZ2V0VGVsZW1ldHJ5RGF0YSgpKSxwYXJhbXMuY29ubmVjdGlvbl9zY29wZSYmYXNzZXJ0LmlzQXJyYXkocGFyYW1zLmNvbm5lY3Rpb25fc2NvcGUpJiYocGFyYW1zLmNvbm5lY3Rpb25fc2NvcGU9cGFyYW1zLmNvbm5lY3Rpb25fc2NvcGUuam9pbigiLCIpKSxwYXJhbXM9b2JqZWN0SGVscGVyLmJsYWNrbGlzdChwYXJhbXMsWyJ1c2VybmFtZSIsInBvcHVwT3B0aW9ucyIsImRvbWFpbiIsInRlbmFudCIsInRpbWVvdXQiLCJhcHBTdGF0ZSJdKSxwYXJhbXM9b2JqZWN0SGVscGVyLnRvU25ha2VDYXNlKHBhcmFtcyxbImF1dGgwQ2xpZW50Il0pLHBhcmFtcz1wYXJhbWV0ZXJzV2hpdGVsaXN0Lm9hdXRoQXV0aG9yaXplUGFyYW1zKHRoaXMud2FybixwYXJhbXMpLHFTdHJpbmc9bGliX3N0cmluZ2lmeShwYXJhbXMpLHVybEpvaW4odGhpcy5iYXNlT3B0aW9ucy5yb290VXJsLCJhdXRob3JpemUiLCI/IitxU3RyaW5nKX0sQXV0aGVudGljYXRpb24ucHJvdG90eXBlLmJ1aWxkTG9nb3V0VXJsPWZ1bmN0aW9uKG9wdGlvbnMpe3ZhciBwYXJhbXMscVN0cmluZztyZXR1cm4gYXNzZXJ0LmNoZWNrKG9wdGlvbnMse29wdGlvbmFsOiEwLHR5cGU6Im9iamVjdCIsbWVzc2FnZToib3B0aW9ucyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0pLHBhcmFtcz1vYmplY3RIZWxwZXIubWVyZ2UodGhpcy5iYXNlT3B0aW9ucyxbImNsaWVudElEIl0pLndpdGgob3B0aW9uc3x8e30pLHRoaXMuYmFzZU9wdGlvbnMuX3NlbmRUZWxlbWV0cnkmJihwYXJhbXMuYXV0aDBDbGllbnQ9dGhpcy5yZXF1ZXN0LmdldFRlbGVtZXRyeURhdGEoKSkscGFyYW1zPW9iamVjdEhlbHBlci50b1NuYWtlQ2FzZShwYXJhbXMsWyJhdXRoMENsaWVudCIsInJldHVyblRvIl0pLHFTdHJpbmc9bGliX3N0cmluZ2lmeShvYmplY3RIZWxwZXIuYmxhY2tsaXN0KHBhcmFtcyxbImZlZGVyYXRlZCJdKSksb3B0aW9ucyYmdm9pZCAwIT09b3B0aW9ucy5mZWRlcmF0ZWQmJiExIT09b3B0aW9ucy5mZWRlcmF0ZWQmJiJmYWxzZSIhPT1vcHRpb25zLmZlZGVyYXRlZCYmKHFTdHJpbmcrPSImZmVkZXJhdGVkIiksdXJsSm9pbih0aGlzLmJhc2VPcHRpb25zLnJvb3RVcmwsInYyIiwibG9nb3V0IiwiPyIrcVN0cmluZyl9LEF1dGhlbnRpY2F0aW9uLnByb3RvdHlwZS5sb2dpbldpdGhEZWZhdWx0RGlyZWN0b3J5PWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3JldHVybiBhc3NlcnQuY2hlY2sob3B0aW9ucyx7dHlwZToib2JqZWN0IixtZXNzYWdlOiJvcHRpb25zIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSx7dXNlcm5hbWU6e3R5cGU6InN0cmluZyIsbWVzc2FnZToidXNlcm5hbWUgb3B0aW9uIGlzIHJlcXVpcmVkIn0scGFzc3dvcmQ6e3R5cGU6InN0cmluZyIsbWVzc2FnZToicGFzc3dvcmQgb3B0aW9uIGlzIHJlcXVpcmVkIn0sc2NvcGU6e29wdGlvbmFsOiEwLHR5cGU6InN0cmluZyIsbWVzc2FnZToic2NvcGUgb3B0aW9uIGlzIHJlcXVpcmVkIn0sYXVkaWVuY2U6e29wdGlvbmFsOiEwLHR5cGU6InN0cmluZyIsbWVzc2FnZToiYXVkaWVuY2Ugb3B0aW9uIGlzIHJlcXVpcmVkIn19KSxvcHRpb25zLmdyYW50VHlwZT0icGFzc3dvcmQiLHRoaXMub2F1dGhUb2tlbihvcHRpb25zLGNiKX0sQXV0aGVudGljYXRpb24ucHJvdG90eXBlLmxvZ2luPWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3JldHVybiBhc3NlcnQuY2hlY2sob3B0aW9ucyx7dHlwZToib2JqZWN0IixtZXNzYWdlOiJvcHRpb25zIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSx7dXNlcm5hbWU6e3R5cGU6InN0cmluZyIsbWVzc2FnZToidXNlcm5hbWUgb3B0aW9uIGlzIHJlcXVpcmVkIn0scGFzc3dvcmQ6e3R5cGU6InN0cmluZyIsbWVzc2FnZToicGFzc3dvcmQgb3B0aW9uIGlzIHJlcXVpcmVkIn0scmVhbG06e3R5cGU6InN0cmluZyIsbWVzc2FnZToicmVhbG0gb3B0aW9uIGlzIHJlcXVpcmVkIn0sc2NvcGU6e29wdGlvbmFsOiEwLHR5cGU6InN0cmluZyIsbWVzc2FnZToic2NvcGUgb3B0aW9uIGlzIHJlcXVpcmVkIn0sYXVkaWVuY2U6e29wdGlvbmFsOiEwLHR5cGU6InN0cmluZyIsbWVzc2FnZToiYXVkaWVuY2Ugb3B0aW9uIGlzIHJlcXVpcmVkIn19KSxvcHRpb25zLmdyYW50VHlwZT0iaHR0cDovL2F1dGgwLmNvbS9vYXV0aC9ncmFudC10eXBlL3Bhc3N3b3JkLXJlYWxtIix0aGlzLm9hdXRoVG9rZW4ob3B0aW9ucyxjYil9LEF1dGhlbnRpY2F0aW9uLnByb3RvdHlwZS5vYXV0aFRva2VuPWZ1bmN0aW9uKG9wdGlvbnMsY2Ipe3ZhciB1cmwsYm9keTtyZXR1cm4gYXNzZXJ0LmNoZWNrKG9wdGlvbnMse3R5cGU6Im9iamVjdCIsbWVzc2FnZToib3B0aW9ucyBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIn0pLGFzc2VydC5jaGVjayhjYix7dHlwZToiZnVuY3Rpb24iLG1lc3NhZ2U6ImNiIHBhcmFtZXRlciBpcyBub3QgdmFsaWQifSksdXJsPXVybEpvaW4odGhpcy5iYXNlT3B0aW9ucy5yb290VXJsLCJvYXV0aCIsInRva2VuIiksYm9keT1vYmplY3RIZWxwZXIubWVyZ2UodGhpcy5iYXNlT3B0aW9ucyxbImNsaWVudElEIiwic2NvcGUiLCJhdWRpZW5jZSJdKS53aXRoKG9wdGlvbnMpLGFzc2VydC5jaGVjayhib2R5LHt0eXBlOiJvYmplY3QiLG1lc3NhZ2U6Im9wdGlvbnMgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCJ9LHtjbGllbnRJRDp7dHlwZToic3RyaW5nIixtZXNzYWdlOiJjbGllbnRJRCBvcHRpb24gaXMgcmVxdWlyZWQifSxncmFudFR5cGU6e3R5cGU6InN0cmluZyIsbWVzc2FnZToiZ3JhbnRUeXBlIG9wdGlvbiBpcyByZXF1aXJlZCJ9LHNjb3BlOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6InNjb3BlIG9wdGlvbiBpcyByZXF1aXJlZCJ9LGF1ZGllbmNlOntvcHRpb25hbDohMCx0eXBlOiJzdHJpbmciLG1lc3NhZ2U6ImF1ZGllbmNlIG9wdGlvbiBpcyByZXF1aXJlZCJ9fSksYm9keT1vYmplY3RIZWxwZXIudG9TbmFrZUNhc2UoYm9keSxbImF1dGgwQ2xpZW50Il0pLGJvZHk9cGFyYW1ldGVyc1doaXRlbGlzdC5vYXV0aFRva2VuUGFyYW1zKHRoaXMud2Fybixib2R5KSx0aGlzLnJlcXVlc3QucG9zdCh1cmwpLnNlbmQoYm9keSkuZW5kKHdyYXBDYWxsYmFjayhjYikpfSxBdXRoZW50aWNhdGlvbi5wcm90b3R5cGUubG9naW5XaXRoUmVzb3VyY2VPd25lcj1mdW5jdGlvbihvcHRpb25zLGNiKXt2YXIgdXJsLGJvZHk7cmV0dXJuIGFzc2VydC5jaGVjay