DIR : /home/kozerus/public_html/jkwii/js/jsdoit/preload/b64_src_preloadjs_loaders_AbstractLoader_js.txt

/home/kozerus/public_html/jkwii/js/jsdoit/preload

LyoKICogQWJzdHJhY3RMb2FkZXIKICogVmlzaXQgaHR0cDovL2NyZWF0ZWpzLmNvbS8gZm9yIGRvY3VtZW50YXRpb24sIHVwZGF0ZXMgYW5kIGV4YW1wbGVzLgogKgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTIgZ3NraW5uZXIuY29tLCBpbmMuCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCiAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCiAqIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCiAqIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwogKiBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQogKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAogKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAogKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogKi8KCi8qKgogKiBAbW9kdWxlIFByZWxvYWRKUwogKi8KCi8vIG5hbWVzcGFjZToKdGhpcy5jcmVhdGVqcyA9IHRoaXMuY3JlYXRlanMgfHwge307CgooZnVuY3Rpb24gKCkgewoJInVzZSBzdHJpY3QiOwoKLy8gY29uc3RydWN0b3IKCS8qKgoJICogVGhlIGJhc2UgbG9hZGVyLCB3aGljaCBkZWZpbmVzIGFsbCB0aGUgZ2VuZXJpYyBtZXRob2RzLCBwcm9wZXJ0aWVzLCBhbmQgZXZlbnRzLiBBbGwgbG9hZGVycyBleHRlbmQgdGhpcyBjbGFzcywKCSAqIGluY2x1ZGluZyB0aGUge3sjY3Jvc3NMaW5rICJMb2FkUXVldWUifX17ey9jcm9zc0xpbmt9fS4KCSAqIEBjbGFzcyBBYnN0cmFjdExvYWRlcgoJICogQHBhcmFtIHtMb2FkSXRlbXxvYmplY3R8c3RyaW5nfSBsb2FkSXRlbSBUaGUgaXRlbSB0byBiZSBsb2FkZWQuCgkgKiBAcGFyYW0ge0Jvb2xlYW59IFtwcmVmZXJYSFJdIERldGVybWluZXMgaWYgdGhlIExvYWRJdGVtIHNob3VsZCA8ZW0+dHJ5PC9lbT4gYW5kIGxvYWQgdXNpbmcgWEhSLCBvciB0YWtlIGEKCSAqIHRhZy1iYXNlZCBhcHByb2FjaCwgd2hpY2ggY2FuIGJlIGJldHRlciBpbiBjcm9zcy1kb21haW4gc2l0dWF0aW9ucy4gTm90IGFsbCBsb2FkZXJzIGNhbiBsb2FkIHVzaW5nIG9uZSBvciB0aGUKCSAqIG90aGVyLCBzbyB0aGlzIGlzIGEgc3VnZ2VzdGVkIGRpcmVjdGl2ZS4KCSAqIEBwYXJhbSB7U3RyaW5nfSBbdHlwZV0gVGhlIHR5cGUgb2YgbG9hZGVyLiBMb2FkZXIgdHlwZXMgYXJlIGRlZmluZWQgYXMgY29uc3RhbnRzIG9uIHRoZSBBYnN0cmFjdExvYWRlciBjbGFzcywKCSAqIHN1Y2ggYXMge3sjY3Jvc3NMaW5rICJJTUFHRTpwcm9wZXJ0eSJ9fXt7L2Nyb3NzTGlua319LCB7eyNjcm9zc0xpbmsgIkNTUzpwcm9wZXJ0eSJ9fXt7L2Nyb3NzTGlua319LCBldGMuCgkgKiBAZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIKCSAqLwoJZnVuY3Rpb24gQWJzdHJhY3RMb2FkZXIobG9hZEl0ZW0sIHByZWZlclhIUiwgdHlwZSkgewoJCXRoaXMuRXZlbnREaXNwYXRjaGVyX2NvbnN0cnVjdG9yKCk7CgoJCS8vIHB1YmxpYyBwcm9wZXJ0aWVzCgkJLyoqCgkJICogSWYgdGhlIGxvYWRlciBoYXMgY29tcGxldGVkIGxvYWRpbmcuIFRoaXMgcHJvdmlkZXMgYSBxdWljayBjaGVjaywgYnV0IGFsc28gZW5zdXJlcyB0aGF0IHRoZSBkaWZmZXJlbnQgYXBwcm9hY2hlcwoJCSAqIHVzZWQgZm9yIGxvYWRpbmcgZG8gbm90IHBpbGUgdXAgcmVzdWx0aW5nIGluIG1vcmUgdGhhbiBvbmUgYGNvbXBsZXRlYCB7eyNjcm9zc0xpbmsgIkV2ZW50In19e3svY3Jvc3NMaW5rfX0uCgkJICogQHByb3BlcnR5IGxvYWRlZAoJCSAqIEB0eXBlIHtCb29sZWFufQoJCSAqIEBkZWZhdWx0IGZhbHNlCgkJICovCgkJdGhpcy5sb2FkZWQgPSBmYWxzZTsKCgkJLyoqCgkJICogRGV0ZXJtaW5lIGlmIHRoZSBsb2FkZXIgd2FzIGNhbmNlbGVkLiBDYW5jZWxlZCBsb2FkcyB3aWxsIG5vdCBmaXJlIGNvbXBsZXRlIGV2ZW50cy4gTm90ZSB0aGF0IHRoaXMgcHJvcGVydHkKCQkgKiBpcyByZWFkb25seSwgc28ge3sjY3Jvc3NMaW5rICJMb2FkUXVldWUifX17ey9jcm9zc0xpbmt9fSBxdWV1ZXMgc2hvdWxkIGJlIGNsb3NlZCB1c2luZyB7eyNjcm9zc0xpbmsgIkxvYWRRdWV1ZS9jbG9zZSJ9fXt7L2Nyb3NzTGlua319CgkJICogaW5zdGVhZC4KCQkgKiBAcHJvcGVydHkgY2FuY2VsZWQKCQkgKiBAdHlwZSB7Qm9vbGVhbn0KCQkgKiBAZGVmYXVsdCBmYWxzZQoJCSAqLwoJCXRoaXMuY2FuY2VsZWQgPSBmYWxzZTsKCgkJLyoqCgkJICogVGhlIGN1cnJlbnQgbG9hZCBwcm9ncmVzcyAocGVyY2VudGFnZSkgZm9yIHRoaXMgaXRlbS4gVGhpcyB3aWxsIGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS4KCQkgKgoJCSAqIDxoND5FeGFtcGxlPC9oND4KCQkgKgoJCSAqICAgICB2YXIgcXVldWUgPSBuZXcgY3JlYXRlanMuTG9hZFF1ZXVlKCk7CgkJICogICAgIHF1ZXVlLmxvYWRGaWxlKCJsYXJnZUltYWdlLnBuZyIpOwoJCSAqICAgICBxdWV1ZS5vbigicHJvZ3Jlc3MiLCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICAgIGNvbnNvbGUubG9nKCJQcm9ncmVzczoiLCBxdWV1ZS5wcm9ncmVzcywgZXZlbnQucHJvZ3Jlc3MpOwoJCSAqICAgICB9KTsKCQkgKgoJCSAqIEBwcm9wZXJ0eSBwcm9ncmVzcwoJCSAqIEB0eXBlIHtOdW1iZXJ9CgkJICogQGRlZmF1bHQgMAoJCSAqLwoJCXRoaXMucHJvZ3Jlc3MgPSAwOwoKCQkvKioKCQkgKiBUaGUgdHlwZSBvZiBpdGVtIHRoaXMgbG9hZGVyIHdpbGwgbG9hZC4gU2VlIHt7I2Nyb3NzTGluayAiQWJzdHJhY3RMb2FkZXIifX17ey9jcm9zc0xpbmt9fSBmb3IgYSBmdWxsIGxpc3Qgb2YKCQkgKiBzdXBwb3J0ZWQgdHlwZXMuCgkJICogQHByb3BlcnR5IHR5cGUKCQkgKiBAdHlwZSB7U3RyaW5nfQoJCSAqLwoJCXRoaXMudHlwZSA9IHR5cGU7CgoJCS8qKgoJCSAqIEEgZm9ybWF0dGVyIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgdGhlIGxvYWRlZCByYXcgcmVzdWx0IGludG8gdGhlIGZpbmFsIHJlc3VsdC4gRm9yIGV4YW1wbGUsIHRoZSBKU09OTG9hZGVyCgkJICogY29udmVydHMgYSBzdHJpbmcgb2YgdGV4dCBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuIE5vdCBhbGwgbG9hZGVycyBoYXZlIGEgcmVzdWx0Rm9ybWF0dGVyLCBhbmQgdGhpcyBwcm9wZXJ0eQoJCSAqIGNhbiBiZSBvdmVycmlkZGVuIHRvIHByb3ZpZGUgY3VzdG9tIGZvcm1hdHRpbmcuCgkJICoKCQkgKiBPcHRpb25hbGx5LCBhIHJlc3VsdEZvcm1hdHRlciBjYW4gcmV0dXJuIGEgY2FsbGJhY2sgZnVuY3Rpb24gaW4gY2FzZXMgd2hlcmUgdGhlIGZvcm1hdHRpbmcgbmVlZHMgdG8gYmUKCQkgKiBhc3luY2hyb25vdXMsIHN1Y2ggYXMgY3JlYXRpbmcgYSBuZXcgaW1hZ2UuCgkJICogQHByb3BlcnR5IHJlc3VsdEZvcm1hdHRlcgoJCSAqIEB0eXBlIHtGdW5jdGlvbn0KCQkgKiBAZGVmYXVsdCBudWxsCgkJICovCgkJdGhpcy5yZXN1bHRGb3JtYXR0ZXIgPSBudWxsOwoKCQkvLyBwcm90ZWN0ZWQgcHJvcGVydGllcwoJCS8qKgoJCSAqIFRoZSB7eyNjcm9zc0xpbmsgIkxvYWRJdGVtIn19e3svY3Jvc3NMaW5rfX0gdGhpcyBsb2FkZXIgcmVwcmVzZW50cy4gTm90ZSB0aGF0IHRoaXMgaXMgbnVsbCBpbiBhIHt7I2Nyb3NzTGluayAiTG9hZFF1ZXVlIn19e3svY3Jvc3NMaW5rfX0sCgkJICogYnV0IHdpbGwgYmUgYXZhaWxhYmxlIG9uIGxvYWRlcnMgc3VjaCBhcyB7eyNjcm9zc0xpbmsgIlhNTExvYWRlciJ9fXt7L2Nyb3NzTGlua319IGFuZCB7eyNjcm9zc0xpbmsgIkltYWdlTG9hZGVyIn19e3svY3Jvc3NMaW5rfX0uCgkJICogQHByb3BlcnR5IF9pdGVtCgkJICogQHR5cGUge0xvYWRJdGVtfE9iamVjdH0KCQkgKiBAcHJpdmF0ZQoJCSAqLwoJCWlmIChsb2FkSXRlbSkgewoJCQl0aGlzLl9pdGVtID0gY3JlYXRlanMuTG9hZEl0ZW0uY3JlYXRlKGxvYWRJdGVtKTsKCQl9IGVsc2UgewoJCQl0aGlzLl9pdGVtID0gbnVsbDsKCQl9CgoJCS8qKgoJCSAqIFdoZXRoZXIgdGhlIGxvYWRlciB3aWxsIHRyeSBhbmQgbG9hZCBjb250ZW50IHVzaW5nIFhIUiAodHJ1ZSkgb3IgSFRNTCB0YWdzIChmYWxzZSkuCgkJICogQHByb3BlcnR5IF9wcmVmZXJYSFIKCQkgKiBAdHlwZSB7Qm9vbGVhbn0KCQkgKiBAcHJpdmF0ZQoJCSAqLwoJCXRoaXMuX3ByZWZlclhIUiA9IHByZWZlclhIUjsKCgkJLyoqCgkJICogVGhlIGxvYWRlZCByZXN1bHQgYWZ0ZXIgaXQgaXMgZm9ybWF0dGVkIGJ5IGFuIG9wdGlvbmFsIHt7I2Nyb3NzTGluayAicmVzdWx0Rm9ybWF0dGVyIn19e3svY3Jvc3NMaW5rfX0uIEZvcgoJCSAqIGl0ZW1zIHRoYXQgYXJlIG5vdCBmb3JtYXR0ZWQsIHRoaXMgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUge3sjY3Jvc3NMaW5rICJfcmF3UmVzdWx0OnByb3BlcnR5In19e3svY3Jvc3NMaW5rfX0uCgkJICogVGhlIHJlc3VsdCBpcyBhY2Nlc3NlZCB1c2luZyB0aGUge3sjY3Jvc3NMaW5rICJnZXRSZXN1bHQifX17ey9jcm9zc0xpbmt9fSBtZXRob2QuCgkJICogQHByb3BlcnR5IF9yZXN1bHQKCQkgKiBAdHlwZSB7T2JqZWN0fFN0cmluZ30KCQkgKiBAcHJpdmF0ZQoJCSAqLwoJCXRoaXMuX3Jlc3VsdCA9IG51bGw7CgoJCS8qKgoJCSAqIFRoZSBsb2FkZWQgcmVzdWx0IGJlZm9yZSBpdCBpcyBmb3JtYXR0ZWQuIFRoZSByYXdSZXN1bHQgaXMgYWNjZXNzZWQgdXNpbmcgdGhlIHt7I2Nyb3NzTGluayAiZ2V0UmVzdWx0In19e3svY3Jvc3NMaW5rfX0KCQkgKiBtZXRob2QsIGFuZCBwYXNzaW5nIGB0cnVlYC4KCQkgKiBAcHJvcGVydHkgX3Jhd1Jlc3VsdAoJCSAqIEB0eXBlIHtPYmplY3R8U3RyaW5nfQoJCSAqIEBwcml2YXRlCgkJICovCgkJdGhpcy5fcmF3UmVzdWx0ID0gbnVsbDsKCgkJLyoqCgkJICogQSBsaXN0IG9mIGl0ZW1zIHRoYXQgbG9hZGVycyBsb2FkIGJlaGluZCB0aGUgc2NlbmVzLiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIG1haW4gaXRlbSB0aGUgbG9hZGVyIGlzCgkJICogcmVzcG9uc2libGUgZm9yIGxvYWRpbmcuIEV4YW1wbGVzIG9mIGxvYWRlcnMgdGhhdCBoYXZlIHN1Yi1pdGVtcyBpbmNsdWRlIHRoZSB7eyNjcm9zc0xpbmsgIlNwcml0ZVNoZWV0TG9hZGVyIn19e3svY3Jvc3NMaW5rfX0gYW5kCgkJICoge3sjY3Jvc3NMaW5rICJNYW5pZmVzdExvYWRlciJ9fXt7L2Nyb3NzTGlua319LgoJCSAqIEBwcm9wZXJ0eSBfbG9hZEl0ZW1zCgkJICogQHR5cGUge251bGx9CgkJICogQHByb3RlY3RlZAoJCSAqLwoJCXRoaXMuX2xvYWRlZEl0ZW1zID0gbnVsbDsKCgkJLyoqCgkJICogVGhlIGF0dHJpYnV0ZSB0aGUgaXRlbXMgbG9hZGVkIHVzaW5nIHRhZ3MgdXNlIGZvciB0aGUgc291cmNlLgoJCSAqIEB0eXBlIHtzdHJpbmd9CgkJICogQGRlZmF1bHQgbnVsbAoJCSAqIEBwcml2YXRlCgkJICovCgkJdGhpcy5fdGFnU3JjQXR0cmlidXRlID0gbnVsbDsKCgkJLyoqCgkJICogQW4gSFRNTCB0YWcgKG9yIHNpbWlsYXIpIHRoYXQgYSBsb2FkZXIgbWF5IHVzZSB0byBsb2FkIEhUTUwgY29udGVudCwgc3VjaCBhcyBpbWFnZXMsIHNjcmlwdHMsIGV0Yy4KCQkgKiBAcHJvcGVydHkgX3RhZwoJCSAqIEB0eXBlIHtPYmplY3R9CgkJICogQHByaXZhdGUKCQkgKi8KCQl0aGlzLl90YWcgPSBudWxsOwoJfTsKCgl2YXIgcCA9IGNyZWF0ZWpzLmV4dGVuZChBYnN0cmFjdExvYWRlciwgY3JlYXRlanMuRXZlbnREaXNwYXRjaGVyKTsKCXZhciBzID0gQWJzdHJhY3RMb2FkZXI7CgoJLy8gVE9ETzogZGVwcmVjYXRlZAoJLy8gcC5pbml0aWFsaXplID0gZnVuY3Rpb24oKSB7fTsgLy8gc2VhcmNoYWJsZSBmb3IgZGV2cyB3b25kZXJpbmcgd2hlcmUgaXQgaXMuIFJFTU9WRUQuIFNlZSBkb2NzIGZvciBkZXRhaWxzLgoKCgkvKioKCSAqIERlZmluZXMgYSBQT1NUIHJlcXVlc3QsIHVzZSBmb3IgYSBtZXRob2QgdmFsdWUgd2hlbiBsb2FkaW5nIGRhdGEuCgkgKiBAcHJvcGVydHkgUE9TVAoJICogQHR5cGUge3N0cmluZ30KCSAqIEBkZWZhdWx0IHBvc3QKCSAqIEBzdGF0aWMKCSAqLwoJcy5QT1NUID0gIlBPU1QiOwoKCS8qKgoJICogRGVmaW5lcyBhIEdFVCByZXF1ZXN0LCB1c2UgZm9yIGEgbWV0aG9kIHZhbHVlIHdoZW4gbG9hZGluZyBkYXRhLgoJICogQHByb3BlcnR5IEdFVAoJICogQHR5cGUge3N0cmluZ30KCSAqIEBkZWZhdWx0IGdldAoJICogQHN0YXRpYwoJICovCglzLkdFVCA9ICJHRVQiOwoKCS8qKgoJICogVGhlIHByZWxvYWQgdHlwZSBmb3IgZ2VuZXJpYyBiaW5hcnkgdHlwZXMuIE5vdGUgdGhhdCBpbWFnZXMgYXJlIGxvYWRlZCBhcyBiaW5hcnkgZmlsZXMgd2hlbiB1c2luZyBYSFIuCgkgKiBAcHJvcGVydHkgQklOQVJZCgkgKiBAdHlwZSB7U3RyaW5nfQoJICogQGRlZmF1bHQgYmluYXJ5CgkgKiBAc3RhdGljCgkgKiBAc2luY2UgMC42LjAKCSAqLwoJcy5CSU5BUlkgPSAiYmluYXJ5IjsKCgkvKioKCSAqIFRoZSBwcmVsb2FkIHR5cGUgZm9yIGNzcyBmaWxlcy4gQ1NTIGZpbGVzIGFyZSBsb2FkZWQgdXNpbmcgYSAmbHQ7bGluayZndDsgd2hlbiBsb2FkZWQgd2l0aCBYSFIsIG9yIGEKCSAqICZsdDtzdHlsZSZndDsgdGFnIHdoZW4gbG9hZGVkIHdpdGggdGFncy4KCSAqIEBwcm9wZXJ0eSBDU1MKCSAqIEB0eXBlIHtTdHJpbmd9CgkgKiBAZGVmYXVsdCBjc3MKCSAqIEBzdGF0aWMKCSAqIEBzaW5jZSAwLjYuMAoJICovCglzLkNTUyA9ICJjc3MiOwoKCS8qKgoJICogVGhlIHByZWxvYWQgdHlwZSBmb3IgaW1hZ2UgZmlsZXMsIHVzdWFsbHkgcG5nLCBnaWYsIG9yIGpwZy9qcGVnLiBJbWFnZXMgYXJlIGxvYWRlZCBpbnRvIGFuICZsdDtpbWFnZSZndDsgdGFnLgoJICogQHByb3BlcnR5IElNQUdFCgkgKiBAdHlwZSB7U3RyaW5nfQoJICogQGRlZmF1bHQgaW1hZ2UKCSAqIEBzdGF0aWMKCSAqIEBzaW5jZSAwLjYuMAoJICovCglzLklNQUdFID0gImltYWdlIjsKCgkvKioKCSAqIFRoZSBwcmVsb2FkIHR5cGUgZm9yIGphdmFzY3JpcHQgZmlsZXMsIHVzdWFsbHkgd2l0aCB0aGUgImpzIiBmaWxlIGV4dGVuc2lvbi4gSmF2YVNjcmlwdCBmaWxlcyBhcmUgbG9hZGVkIGludG8gYQoJICogJmx0O3NjcmlwdCZndDsgdGFnLgoJICoKCSAqIFNpbmNlIHZlcnNpb24gMC40LjErLCBkdWUgdG8gaG93IHRhZy1sb2FkZWQgc2NyaXB0cyB3b3JrLCBhbGwgSmF2YVNjcmlwdCBmaWxlcyBhcmUgYXV0b21hdGljYWxseSBpbmplY3RlZCBpbnRvCgkgKiB0aGUgYm9keSBvZiB0aGUgZG9jdW1lbnQgdG8gbWFpbnRhaW4gcGFyaXR5IGJldHdlZW4gWEhSIGFuZCB0YWctbG9hZGVkIHNjcmlwdHMuIEluIHZlcnNpb24gMC40LjAgYW5kIGVhcmxpZXIsCgkgKiBvbmx5IHRhZy1sb2FkZWQgc2NyaXB0cyBhcmUgaW5qZWN0ZWQuCgkgKiBAcHJvcGVydHkgSkFWQVNDUklQVAoJICogQHR5cGUge1N0cmluZ30KCSAqIEBkZWZhdWx0IGphdmFzY3JpcHQKCSAqIEBzdGF0aWMKCSAqIEBzaW5jZSAwLjYuMAoJICovCglzLkpBVkFTQ1JJUFQgPSAiamF2YXNjcmlwdCI7CgoJLyoqCgkgKiBUaGUgcHJlbG9hZCB0eXBlIGZvciBqc29uIGZpbGVzLCB1c3VhbGx5IHdpdGggdGhlICJqc29uIiBmaWxlIGV4dGVuc2lvbi4gSlNPTiBkYXRhIGlzIGxvYWRlZCBhbmQgcGFyc2VkIGludG8gYQoJICogSmF2YVNjcmlwdCBvYmplY3QuIE5vdGUgdGhhdCBpZiBhIGBjYWxsYmFja2AgaXMgcHJlc2VudCBvbiB0aGUgbG9hZCBpdGVtLCB0aGUgZmlsZSB3aWxsIGJlIGxvYWRlZCB3aXRoIEpTT05QLAoJICogbm8gbWF0dGVyIHdoYXQgdGhlIHt7I2Nyb3NzTGluayAiTG9hZFF1ZXVlL3ByZWZlclhIUjpwcm9wZXJ0eSJ9fXt7L2Nyb3NzTGlua319IHByb3BlcnR5IGlzIHNldCB0bywgYW5kIHRoZSBKU09OCgkgKiBtdXN0IGNvbnRhaW4gYSBtYXRjaGluZyB3cmFwcGVyIGZ1bmN0aW9uLgoJICogQHByb3BlcnR5IEpTT04KCSAqIEB0eXBlIHtTdHJpbmd9CgkgKiBAZGVmYXVsdCBqc29uCgkgKiBAc3RhdGljCgkgKiBAc2luY2UgMC42LjAKCSAqLwoJcy5KU09OID0gImpzb24iOwoKCS8qKgoJICogVGhlIHByZWxvYWQgdHlwZSBmb3IganNvbnAgZmlsZXMsIHVzdWFsbHkgd2l0aCB0aGUgImpzb24iIGZpbGUgZXh0ZW5zaW9uLiBKU09OIGRhdGEgaXMgbG9hZGVkIGFuZCBwYXJzZWQgaW50byBhCgkgKiBKYXZhU2NyaXB0IG9iamVjdC4gWW91IGFyZSByZXF1aXJlZCB0byBwYXNzIGEgY2FsbGJhY2sgcGFyYW1ldGVyIHRoYXQgbWF0Y2hlcyB0aGUgZnVuY3Rpb24gd3JhcHBlciBpbiB0aGUgSlNPTi4KCSAqIE5vdGUgdGhhdCBKU09OUCB3aWxsIGFsd2F5cyBiZSB1c2VkIGlmIHRoZXJlIGlzIGEgY2FsbGJhY2sgcHJlc2VudCwgbm8gbWF0dGVyIHdoYXQgdGhlIHt7I2Nyb3NzTGluayAiTG9hZFF1ZXVlL3ByZWZlclhIUjpwcm9wZXJ0eSJ9fXt7L2Nyb3NzTGlua319CgkgKiBwcm9wZXJ0eSBpcyBzZXQgdG8uCgkgKiBAcHJvcGVydHkgSlNPTlAKCSAqIEB0eXBlIHtTdHJpbmd9CgkgKiBAZGVmYXVsdCBqc29ucAoJICogQHN0YXRpYwoJICogQHNpbmNlIDAuNi4wCgkgKi8KCXMuSlNPTlAgPSAianNvbnAiOwoKCS8qKgoJICogVGhlIHByZWxvYWQgdHlwZSBmb3IganNvbi1iYXNlZCBtYW5pZmVzdCBmaWxlcywgdXN1YWxseSB3aXRoIHRoZSAianNvbiIgZmlsZSBleHRlbnNpb24uIFRoZSBKU09OIGRhdGEgaXMgbG9hZGVkCgkgKiBhbmQgcGFyc2VkIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC4gUHJlbG9hZEpTIHdpbGwgdGhlbiBsb29rIGZvciBhICJtYW5pZmVzdCIgcHJvcGVydHkgaW4gdGhlIEpTT04sIHdoaWNoIGlzIGFuCgkgKiBBcnJheSBvZiBmaWxlcyB0byBsb2FkLCBmb2xsb3dpbmcgdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSB7eyNjcm9zc0xpbmsgIkxvYWRRdWV1ZS9sb2FkTWFuaWZlc3QifX17ey9jcm9zc0xpbmt9fQoJICogbWV0aG9kLiBJZiBhICJjYWxsYmFjayIgaXMgc3BlY2lmaWVkIG9uIHRoZSBtYW5pZmVzdCBvYmplY3QsIHRoZW4gaXQgd2lsbCBiZSBsb2FkZWQgdXNpbmcgSlNPTlAgaW5zdGVhZCwKCSAqIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUge3sjY3Jvc3NMaW5rICJMb2FkUXVldWUvcHJlZmVyWEhSOnByb3BlcnR5In19e3svY3Jvc3NMaW5rfX0gcHJvcGVydHkgaXMgc2V0IHRvLgoJICogQHByb3BlcnR5IE1BTklGRVNUCgkgKiBAdHlwZSB7U3RyaW5nfQoJICogQGRlZmF1bHQgbWFuaWZlc3QKCSAqIEBzdGF0aWMKCSAqIEBzaW5jZSAwLjYuMAoJICovCglzLk1BTklGRVNUID0gIm1hbmlmZXN0IjsKCgkvKioKCSAqIFRoZSBwcmVsb2FkIHR5cGUgZm9yIHNvdW5kIGZpbGVzLCB1c3VhbGx5IG1wMywgb2dnLCBvciB3YXYuIFdoZW4gbG9hZGluZyB2aWEgdGFncywgYXVkaW8gaXMgbG9hZGVkIGludG8gYW4KCSAqICZsdDthdWRpbyZndDsgdGFnLgoJICogQHByb3BlcnR5IFNPVU5ECgkgKiBAdHlwZSB7U3RyaW5nfQoJICogQGRlZmF1bHQgc291bmQKCSAqIEBzdGF0aWMKCSAqIEBzaW5jZSAwLjYuMAoJICovCglzLlNPVU5EID0gInNvdW5kIjsKCgkvKioKCSAqIFRoZSBwcmVsb2FkIHR5cGUgZm9yIHZpZGVvIGZpbGVzLCB1c3VhbGx5IG1wNCwgdHMsIG9yIG9nZy4gV2hlbiBsb2FkaW5nIHZpYSB0YWdzLCB2aWRlbyBpcyBsb2FkZWQgaW50byBhbgoJICogJmx0O3ZpZGVvJmd0OyB0YWcuCgkgKiBAcHJvcGVydHkgVklERU8KCSAqIEB0eXBlIHtTdHJpbmd9CgkgKiBAZGVmYXVsdCB2aWRlbwoJICogQHN0YXRpYwoJICogQHNpbmNlIDAuNi4wCgkgKi8KCXMuVklERU8gPSAidmlkZW8iOwoKCS8qKgoJICogVGhlIHByZWxvYWQgdHlwZSBmb3IgU3ByaXRlU2hlZXQgZmlsZXMuIFNwcml0ZVNoZWV0IGZpbGVzIGFyZSBKU09OIGZpbGVzIHRoYXQgY29udGFpbiBzdHJpbmcgaW1hZ2UgcGF0aHMuCgkgKiBAcHJvcGVydHkgU1BSSVRFU0hFRVQKCSAqIEB0eXBlIHtTdHJpbmd9CgkgKiBAZGVmYXVsdCBzcHJpdGVzaGVldAoJICogQHN0YXRpYwoJICogQHNpbmNlIDAuNi4wCgkgKi8KCXMuU1BSSVRFU0hFRVQgPSAic3ByaXRlc2hlZXQiOwoKCS8qKgoJICogVGhlIHByZWxvYWQgdHlwZSBmb3IgU1ZHIGZpbGVzLgoJICogQHByb3BlcnR5IFNWRwoJICogQHR5cGUge1N0cmluZ30KCSAqIEBkZWZhdWx0IHN2ZwoJICogQHN0YXRpYwoJICogQHNpbmNlIDAuNi4wCgkgKi8KCXMuU1ZHID0gInN2ZyI7CgoJLyoqCgkgKiBUaGUgcHJlbG9hZCB0eXBlIGZvciB0ZXh0IGZpbGVzLCB3aGljaCBpcyBhbHNvIHRoZSBkZWZhdWx0IGZpbGUgdHlwZSBpZiB0aGUgdHlwZSBjYW4gbm90IGJlIGRldGVybWluZWQuIFRleHQgaXMKCSAqIGxvYWRlZCBhcyByYXcgdGV4dC4KCSAqIEBwcm9wZXJ0eSBURVhUCgkgKiBAdHlwZSB7U3RyaW5nfQoJICogQGRlZmF1bHQgdGV4dAoJICogQHN0YXRpYwoJICogQHNpbmNlIDAuNi4wCgkgKi8KCXMuVEVYVCA9ICJ0ZXh0IjsKCgkvKioKCSAqIFRoZSBwcmVsb2FkIHR5cGUgZm9yIHhtbCBmaWxlcy4gWE1MIGlzIGxvYWRlZCBpbnRvIGFuIFhNTCBkb2N1bWVudC4KCSAqIEBwcm9wZXJ0eSBYTUwKCSAqIEB0eXBlIHtTdHJpbmd9CgkgKiBAZGVmYXVsdCB4bWwKCSAqIEBzdGF0aWMKCSAqIEBzaW5jZSAwLjYuMAoJICovCglzLlhNTCA9ICJ4bWwiOwoKLy8gRXZlbnRzCgkvKioKCSAqIFRoZSB7eyNjcm9zc0xpbmsgIlByb2dyZXNzRXZlbnQifX17ey9jcm9zc0xpbmt9fSB0aGF0IGlzIGZpcmVkIHdoZW4gdGhlIG92ZXJhbGwgcHJvZ3Jlc3MgY2hhbmdlcy4gUHJpb3IgdG8KCSAqIHZlcnNpb24gMC42LjAsIHRoaXMgd2FzIGp1c3QgYSByZWd1bGFyIHt7I2Nyb3NzTGluayAiRXZlbnQifX17ey9jcm9zc0xpbmt9fS4KCSAqIEBldmVudCBwcm9ncmVzcwoJICogQHNpbmNlIDAuMy4wCgkgKi8KCgkvKioKCSAqIFRoZSB7eyNjcm9zc0xpbmsgIkV2ZW50In19e3svY3Jvc3NMaW5rfX0gdGhhdCBpcyBmaXJlZCB3aGVuIGEgbG9hZCBzdGFydHMuCgkgKiBAZXZlbnQgbG9hZHN0YXJ0CgkgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IFRoZSBvYmplY3QgdGhhdCBkaXNwYXRjaGVkIHRoZSBldmVudC4KCSAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlLgoJICogQHNpbmNlIDAuMy4xCgkgKi8KCgkvKioKCSAqIFRoZSB7eyNjcm9zc0xpbmsgIkV2ZW50In19e3svY3Jvc3NMaW5rfX0gdGhhdCBpcyBmaXJlZCB3aGVuIHRoZSBlbnRpcmUgcXVldWUgaGFzIGJlZW4gbG9hZGVkLgoJICogQGV2ZW50IGNvbXBsZXRlCgkgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IFRoZSBvYmplY3QgdGhhdCBkaXNwYXRjaGVkIHRoZSBldmVudC4KCSAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlLgoJICogQHNpbmNlIDAuMy4wCgkgKi8KCgkvKioKCSAqIFRoZSB7eyNjcm9zc0xpbmsgIkVycm9yRXZlbnQifX17ey9jcm9zc0xpbmt9fSB0aGF0IGlzIGZpcmVkIHdoZW4gdGhlIGxvYWRlciBlbmNvdW50ZXJzIGFuIGVycm9yLiBJZiB0aGUgZXJyb3Igd2FzCgkgKiBlbmNvdW50ZXJlZCBieSBhIGZpbGUsIHRoZSBldmVudCB3aWxsIGNvbnRhaW4gdGhlIGl0ZW0gdGhhdCBjYXVzZWQgdGhlIGVycm9yLiBQcmlvciB0byB2ZXJzaW9uIDAuNi4wLCB0aGlzIHdhcwoJICoganVzdCBhIHJlZ3VsYXIge3sjY3Jvc3NMaW5rICJFdmVudCJ9fXt7L2Nyb3NzTGlua319LgoJICogQGV2ZW50IGVycm9yCgkgKiBAc2luY2UgMC4zLjAKCSAqLwoKCS8qKgoJICogVGhlIHt7I2Nyb3NzTGluayAiRXZlbnQifX17ey9jcm9zc0xpbmt9fSB0aGF0IGlzIGZpcmVkIHdoZW4gdGhlIGxvYWRlciBlbmNvdW50ZXJzIGFuIGludGVybmFsIGZpbGUgbG9hZCBlcnJvci4KCSAqIFRoaXMgZW5hYmxlcyBsb2FkZXJzIHRvIG1haW50YWluIGludGVybmFsIHF1ZXVlcywgYW5kIHN1cmZhY2UgZmlsZSBsb2FkIGVycm9ycy4KCSAqIEBldmVudCBmaWxlZXJyb3IKCSAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IGRpc3BhdGNoZWQgdGhlIGV2ZW50LgoJICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGV2ZW4gdHlwZSAoImZpbGVlcnJvciIpCgkgKiBAcGFyYW0ge0xvYWRJdGVtfG9iamVjdH0gVGhlIGl0ZW0gdGhhdCBlbmNvdW50ZXJlZCB0aGUgZXJyb3IKCSAqIEBzaW5jZSAwLjYuMAoJICovCgoJLyoqCgkgKiBUaGUge3sjY3Jvc3NMaW5rICJFdmVudCJ9fXt7L2Nyb3NzTGlua319IHRoYXQgaXMgZmlyZWQgd2hlbiBhIGxvYWRlciBpbnRlcm5hbGx5IGxvYWRzIGEgZmlsZS4gVGhpcyBlbmFibGVzCgkgKiBsb2FkZXJzIHN1Y2ggYXMge3sjY3Jvc3NMaW5rICJNYW5pZmVzdExvYWRlciJ9fXt7L2Nyb3NzTGlua319IHRvIG1haW50YWluIGludGVybmFsIHt7I2Nyb3NzTGluayAiTG9hZFF1ZXVlIn19e3svY3Jvc3NMaW5rfX1zCgkgKiBhbmQgbm90aWZ5IHdoZW4gdGhleSBoYXZlIGxvYWRlZCBhIGZpbGUuIFRoZSB7eyNjcm9zc0xpbmsgIkxvYWRRdWV1ZSJ9fXt7L2Nyb3NzTGlua319IGNsYXNzIGRpc3BhdGNoZXMgYQoJICogc2xpZ2h0bHkgZGlmZmVyZW50IHt7I2Nyb3NzTGluayAiTG9hZFF1ZXVlL2ZpbGVsb2FkOmV2ZW50In19e3svY3Jvc3NMaW5rfX0gZXZlbnQuCgkgKiBAZXZlbnQgZmlsZWxvYWQKCSAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IGRpc3BhdGNoZWQgdGhlIGV2ZW50LgoJICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgKCJmaWxlbG9hZCIpCgkgKiBAcGFyYW0ge09iamVjdH0gaXRlbSBUaGUgZmlsZSBpdGVtIHdoaWNoIHdhcyBzcGVjaWZpZWQgaW4gdGhlIHt7I2Nyb3NzTGluayAiTG9hZFF1ZXVlL2xvYWRGaWxlIn19e3svY3Jvc3NMaW5rfX0KCSAqIG9yIHt7I2Nyb3NzTGluayAiTG9hZFF1ZXVlL2xvYWRNYW5pZmVzdCJ9fXt7L2Nyb3NzTGlua319IGNhbGwuIElmIG9ubHkgYSBzdHJpbmcgcGF0aCBvciB0YWcgd2FzIHNwZWNpZmllZCwgdGhlCgkgKiBvYmplY3Qgd2lsbCBjb250YWluIHRoYXQgdmFsdWUgYXMgYSBgc3JjYCBwcm9wZXJ0eS4KCSAqIEBwYXJhbSB7T2JqZWN0fSByZXN1bHQgVGhlIEhUTUwgdGFnIG9yIHBhcnNlZCByZXN1bHQgb2YgdGhlIGxvYWRlZCBpdGVtLgoJICogQHBhcmFtIHtPYmplY3R9IHJhd1Jlc3VsdCBUaGUgdW5wcm9jZXNzZWQgcmVzdWx0LCB1c3VhbGx5IHRoZSByYXcgdGV4dCBvciBiaW5hcnkgZGF0YSBiZWZvcmUgaXQgaXMgY29udmVydGVkCgkgKiB0byBhIHVzYWJsZSBvYmplY3QuCgkgKiBAc2luY2UgMC42LjAKCSAqLwoKCS8qKgoJICogVGhlIHt7I2Nyb3NzTGluayAiRXZlbnQifX17ey9jcm9zc0xpbmt9fSB0aGF0IGlzIGZpcmVkIGFmdGVyIHRoZSBpbnRlcm5hbCByZXF1ZXN0IGlzIGNyZWF0ZWQsIGJ1dCBiZWZvcmUgYSBsb2FkLgoJICogVGhpcyBhbGxvd3MgdXBkYXRlcyB0byB0aGUgbG9hZGVyIGZvciBzcGVjaWZpYyBsb2FkaW5nIG5lZWRzLCBzdWNoIGFzIGJpbmFyeSBvciBYSFIgaW1hZ2UgbG9hZGluZy4KCSAqIEBldmVudCBpbml0aWFsaXplCgkgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IFRoZSBvYmplY3QgdGhhdCBkaXNwYXRjaGVkIHRoZSBldmVudC4KCSAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlICgiaW5pdGlhbGl6ZSIpCgkgKiBAcGFyYW0ge0Fic3RyYWN0TG9hZGVyfSBsb2FkZXIgVGhlIGxvYWRlciB0aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkLgoJICovCgoKCS8qKgoJICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBtYW5pZmVzdCBpdGVtIHRoYXQgaXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLiBJbiBzb21lIGNhc2VzIHRoaXMgd2lsbCBiZSB0aGUgdmFsdWUgdGhhdCB3YXMKCSAqIHBhc3NlZCBpbnRvIHt7I2Nyb3NzTGluayAiTG9hZFF1ZXVlIn19e3svY3Jvc3NMaW5rfX0gdXNpbmcge3sjY3Jvc3NMaW5rICJMb2FkUXVldWUvbG9hZEZpbGUifX17ey9jcm9zc0xpbmt9fSBvcgoJICoge3sjY3Jvc3NMaW5rICJMb2FkUXVldWUvbG9hZE1hbmlmZXN0In19e3svY3Jvc3NMaW5rfX0uIEhvd2V2ZXIgaWYgb25seSBhIFN0cmluZyBwYXRoIHdhcyBwYXNzZWQgaW4sIHRoZW4gaXQgd2lsbAoJICogYmUgYSB7eyNjcm9zc0xpbmsgIkxvYWRJdGVtIn19e3svY3Jvc3NMaW5rfX0uCgkgKiBAbWV0aG9kIGdldEl0ZW0KCSAqIEByZXR1cm4ge09iamVjdH0gVGhlIG1hbmlmZXN0IGl0ZW0gdGhhdCB0aGlzIGxvYWRlciBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZy4KCSAqIEBzaW5jZSAwLjYuMAoJICovCglwLmdldEl0ZW0gPSBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuX2l0ZW07Cgl9OwoKCS8qKgoJICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZW50IHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgbG9hZGVyIChvbmx5IGF2YWlsYWJsZSBhZnRlciB0aGUge3sjY3Jvc3NMaW5rICJjb21wbGV0ZTpldmVudCJ9fXt7L2Nyb3NzTGlua319CgkgKiBldmVudCBpcyBkaXNwYXRjaGVkLgoJICogQG1ldGhvZCBnZXRSZXN1bHQKCSAqIEBwYXJhbSB7Qm9vbGVhbn0gW3Jhdz1mYWxzZV0gRGV0ZXJtaW5lcyBpZiB0aGUgcmV0dXJuZWQgcmVzdWx0IHdpbGwgYmUgdGhlIGZvcm1hdHRlZCBjb250ZW50LCBvciB0aGUgcmF3IGxvYWRlZAoJICogZGF0YSAoaWYgaXQgZXhpc3RzKS4KCSAqIEByZXR1cm4ge09iamVjdH0KCSAqIEBzaW5jZSAwLjYuMAoJICovCglwLmdldFJlc3VsdCA9IGZ1bmN0aW9uIChyYXcpIHsKCQlyZXR1cm4gcmF3ID8gdGhpcy5fcmF3UmVzdWx0IDogdGhpcy5fcmVzdWx0OwoJfTsKCgkvKioKCSAqIFJldHVybiB0aGUgYHRhZ2AgdGhpcyBvYmplY3QgY3JlYXRlcyBvciB1c2VzIGZvciBsb2FkaW5nLgoJICogQG1ldGhvZCBnZXRUYWcKCSAqIEByZXR1cm4ge09iamVjdH0gVGhlIHRhZyBpbnN0YW5jZQoJICogQHNpbmNlIDAuNi4wCgkgKi8KCXAuZ2V0VGFnID0gZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLl90YWc7Cgl9OwoKCS8qKgoJICogU2V0IHRoZSBgdGFnYCB0aGlzIGl0ZW0gdXNlcyBmb3IgbG9hZGluZy4KCSAqIEBtZXRob2Qgc2V0VGFnCgkgKiBAcGFyYW0ge09iamVjdH0gdGFnIFRoZSB0YWcgaW5zdGFuY2UKCSAqIEBzaW5jZSAwLjYuMAoJICovCglwLnNldFRhZyA9IGZ1bmN0aW9uKHRhZykgewoJICB0aGlzLl90YWcgPSB0YWc7Cgl9OwoKCS8qKgoJICogQmVnaW4gbG9hZGluZyB0aGUgaXRlbS4gVGhpcyBtZXRob2QgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyBhIGxvYWRlciBieSBpdHNlbGYuCgkgKgoJICogPGg0PkV4YW1wbGU8L2g0PgoJICoKCSAqICAgICAgdmFyIHF1ZXVlID0gbmV3IGNyZWF0ZWpzLkxvYWRRdWV1ZSgpOwoJICogICAgICBxdWV1ZS5vbigiY29tcGxldGUiLCBoYW5kbGVDb21wbGV0ZSk7CgkgKiAgICAgIHF1ZXVlLmxvYWRNYW5pZmVzdChmaWxlQXJyYXksIGZhbHNlKTsgLy8gTm90ZSB0aGUgMm5kIGFyZ3VtZW50IHRoYXQgdGVsbHMgdGhlIHF1ZXVlIG5vdCB0byBzdGFydCBsb2FkaW5nIHlldAoJICogICAgICBxdWV1ZS5sb2FkKCk7CgkgKgoJICogQG1ldGhvZCBsb2FkCgkgKi8KCXAubG9hZCA9IGZ1bmN0aW9uICgpIHsKCQl0aGlzLl9jcmVhdGVSZXF1ZXN0KCk7CgoJCXRoaXMuX3JlcXVlc3Qub24oImNvbXBsZXRlIiwgdGhpcywgdGhpcyk7CgkJdGhpcy5fcmVxdWVzdC5vbigicHJvZ3Jlc3MiLCB0aGlzLCB0aGlzKTsKCQl0aGlzLl9yZXF1ZXN0Lm9uKCJsb2FkU3RhcnQiLCB0aGlzLCB0aGlzKTsKCQl0aGlzLl9yZXF1ZXN0Lm9uKCJhYm9ydCIsIHRoaXMsIHRoaXMpOwoJCXRoaXMuX3JlcXVlc3Qub24oInRpbWVvdXQiLCB0aGlzLCB0aGlzKTsKCQl0aGlzLl9yZXF1ZXN0Lm9uKCJlcnJvciIsIHRoaXMsIHRoaXMpOwoKCQl2YXIgZXZ0ID0gbmV3IGNyZWF0ZWpzLkV2ZW50KCJpbml0aWFsaXplIik7CgkJZXZ0LmxvYWRlciA9IHRoaXMuX3JlcXVlc3Q7CgkJdGhpcy5kaXNwYXRjaEV2ZW50KGV2dCk7CgoJCXRoaXMuX3JlcXVlc3QubG9hZCgpOwoJfTsKCgkvKioKCSAqIENsb3NlIHRoZSB0aGUgaXRlbS4gVGhpcyB3aWxsIHN0b3AgYW55IG9wZW4gcmVxdWVzdHMgKGFsdGhvdWdoIGRvd25sb2FkcyB1c2luZyBIVE1MIHRhZ3MgbWF5IHN0aWxsIGNvbnRpbnVlIGluCgkgKiB0aGUgYmFja2dyb3VuZCksIGJ1dCBldmVudHMgd2lsbCBub3QgbG9uZ2VyIGJlIGRpc3BhdGNoZWQuCgkgKiBAbWV0aG9kIGNhbmNlbAoJICovCglwLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHsKCQl0aGlzLmNhbmNlbGVkID0gdHJ1ZTsKCQl0aGlzLmRlc3Ryb3koKTsKCX07CgoJLyoqCgkgKiBDbGVhbiB1cCB0aGUgbG9hZGVyLgoJICogQG1ldGhvZCBkZXN0cm95CgkgKi8KCXAuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewoJCWlmICh0aGlzLl9yZXF1ZXN0KSB7CgkJCXRoaXMuX3JlcXVlc3QucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKCQkJdGhpcy5fcmVxdWVzdC5kZXN0cm95KCk7CgkJfQoKCQl0aGlzLl9yZXF1ZXN0ID0gbnVsbDsKCgkJdGhpcy5faXRlbSA9IG51bGw7CgkJdGhpcy5fcmF3UmVzdWx0ID0gbnVsbDsKCQl0aGlzLl9yZXN1bHQgPSBudWxsOwoKCQl0aGlzLl9sb2FkSXRlbXMgPSBudWxsOwoKCQl0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7Cgl9OwoKCS8qKgoJICogR2V0IGFueSBpdGVtcyBsb2FkZWQgaW50ZXJuYWxseSBieSB0aGUgbG9hZGVyLiBUaGUgZW5hYmxlcyBsb2FkZXJzIHN1Y2ggYXMge3sjY3Jvc3NMaW5rICJNYW5pZmVzdExvYWRlciJ9fXt7L2Nyb3NzTGlua319CgkgKiB0byBleHBvc2UgaXRlbXMgaXQgbG9hZHMgaW50ZXJuYWxseS4KCSAqIEBtZXRob2QgZ2V0TG9hZGVkSXRlbXMKCSAqIEByZXR1cm4ge0FycmF5fSBBIGxpc3Qgb2YgdGhlIGl0ZW1zIGxvYWRlZCBieSB0aGUgbG9hZGVyLgoJICogQHNpbmNlIDAuNi4wCgkgKi8KCXAuZ2V0TG9hZGVkSXRlbXMgPSBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuX2xvYWRlZEl0ZW1zOwoJfTsKCgoJLy8gUHJpdmF0ZSBtZXRob2RzCgkvKioKCSAqIENyZWF0ZSBhbiBpbnRlcm5hbCByZXF1ZXN0IHVzZWQgZm9yIGxvYWRpbmcuIEJ5IGRlZmF1bHQsIGFuIHt7I2Nyb3NzTGluayAiWEhSUmVxdWVzdCJ9fXt7L2Nyb3NzTGlua319IG9yCgkgKiB7eyNjcm9zc0xpbmsgIlRhZ1JlcXVlc3QifX17ey9jcm9zc0xpbmt9fSBpcyBjcmVhdGVkLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHt7I2Nyb3NzTGluayAicHJlZmVyWEhSOnByb3BlcnR5In19e3svY3Jvc3NMaW5rfX0uCgkgKiBPdGhlciBsb2FkZXJzIG1heSBvdmVycmlkZSB0aGlzIHRvIHVzZSBkaWZmZXJlbnQgcmVxdWVzdCB0eXBlcywgc3VjaCBhcyB7eyNjcm9zc0xpbmsgIk1hbmlmZXN0TG9hZGVyIn19e3svY3Jvc3NMaW5rfX0sCgkgKiB3aGljaCB1c2VzIHt7I2Nyb3NzTGluayAiSlNPTkxvYWRlciJ9fXt7L2Nyb3NzTGlua319IG9yIHt7I2Nyb3NzTGluayAiSlNPTlBMb2FkZXIifX17ey9jcm9zc0xpbmt9fSB1bmRlciB0aGUgaG9vZC4KCSAqIEBtZXRob2QgX2NyZWF0ZVJlcXVlc3QKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcC5fY3JlYXRlUmVxdWVzdCA9IGZ1bmN0aW9uKCkgewoJCWlmICghdGhpcy5fcHJlZmVyWEhSKSB7CgkJCXRoaXMuX3JlcXVlc3QgPSBuZXcgY3JlYXRlanMuVGFnUmVxdWVzdCh0aGlzLl9pdGVtLCB0aGlzLl90YWcgfHwgdGhpcy5fY3JlYXRlVGFnKCksIHRoaXMuX3RhZ1NyY0F0dHJpYnV0ZSk7CgkJfSBlbHNlIHsKCQkJdGhpcy5fcmVxdWVzdCA9IG5ldyBjcmVhdGVqcy5YSFJSZXF1ZXN0KHRoaXMuX2l0ZW0pOwoJCX0KCX07CgoJLyoqCgkgKiBDcmVhdGUgdGhlIEhUTUwgdGFnIHVzZWQgZm9yIGxvYWRpbmcuIFRoaXMgbWV0aG9kIGRvZXMgbm90aGluZyBieSBkZWZhdWx0LCBhbmQgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQKCSAqIGJ5IGxvYWRlcnMgdGhhdCByZXF1aXJlIHRhZyBsb2FkaW5nLgoJICogQG1ldGhvZCBfY3JlYXRlVGFnCgkgKiBAcGFyYW0ge1N0cmluZ30gc3JjIFRoZSB0YWcgc291cmNlCgkgKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gVGhlIHRhZyB0aGF0IHdhcyBjcmVhdGVkCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXAuX2NyZWF0ZVRhZyA9IGZ1bmN0aW9uKHNyYykgeyByZXR1cm4gbnVsbDsgfTsKCgkvKioKCSAqIERpc3BhdGNoIGEgbG9hZHN0YXJ0IHt7I2Nyb3NzTGluayAiRXZlbnQifX17ey9jcm9zc0xpbmt9fS4gUGxlYXNlIHNlZSB0aGUge3sjY3Jvc3NMaW5rICJBYnN0cmFjdExvYWRlci9sb2Fkc3RhcnQ6ZXZlbnQifX17ey9jcm9zc0xpbmt9fQoJICogZXZlbnQgZm9yIGRldGFpbHMgb24gdGhlIGV2ZW50IHBheWxvYWQuCgkgKiBAbWV0aG9kIF9zZW5kTG9hZFN0YXJ0CgkgKiBAcHJvdGVjdGVkCgkgKi8KCXAuX3NlbmRMb2FkU3RhcnQgPSBmdW5jdGlvbiAoKSB7CgkJaWYgKHRoaXMuX2lzQ2FuY2VsZWQoKSkgeyByZXR1cm47IH0KCQl0aGlzLmRpc3BhdGNoRXZlbnQoImxvYWRzdGFydCIpOwoJfTsKCgkvKioKCSAqIERpc3BhdGNoIGEge3sjY3Jvc3NMaW5rICJQcm9ncmVzc0V2ZW50In19e3svY3Jvc3NMaW5rfX0uCgkgKiBAbWV0aG9kIF9zZW5kUHJvZ3Jlc3MKCSAqIEBwYXJhbSB7TnVtYmVyIHwgT2JqZWN0fSB2YWx1ZSBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIGxvYWRlZCBpdGVtLCBvciBhbiBvYmplY3QgY29udGFpbmluZyA8Y29kZT5sb2FkZWQ8L2NvZGU+CgkgKiBhbmQgPGNvZGU+dG90YWw8L2NvZGU+IHByb3BlcnRpZXMuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXAuX3NlbmRQcm9ncmVzcyA9IGZ1bmN0aW9uICh2YWx1ZSkgewoJCWlmICh0aGlzLl9pc0NhbmNlbGVkKCkpIHsgcmV0dXJuOyB9CgkJdmFyIGV2ZW50ID0gbnVsbDsKCQlpZiAodHlwZW9mKHZhbHVlKSA9PSAibnVtYmVyIikgewoJCQl0aGlzLnByb2dyZXNzID0gdmFsdWU7CgkJCWV2ZW50ID0gbmV3IGNyZWF0ZWpzLlByb2dyZXNzRXZlbnQodGhpcy5wcm9ncmVzcyk7CgkJfSBlbHNlIHsKCQkJZXZlbnQgPSB2YWx1ZTsKCQkJdGhpcy5wcm9ncmVzcyA9IHZhbHVlLmxvYWRlZCAvIHZhbHVlLnRvdGFsOwoJCQlldmVudC5wcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3M7CgkJCWlmIChpc05hTih0aGlzLnByb2dyZXNzKSB8fCB0aGlzLnByb2dyZXNzID09IEluZmluaXR5KSB7IHRoaXMucHJvZ3Jlc3MgPSAwOyB9CgkJfQoJCXRoaXMuaGFzRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiKSAmJiB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpOwoJfTsKCgkvKioKCSAqIERpc3BhdGNoIGEgY29tcGxldGUge3sjY3Jvc3NMaW5rICJFdmVudCJ9fXt7L2Nyb3NzTGlua319LiBQbGVhc2Ugc2VlIHRoZSB7eyNjcm9zc0xpbmsgIkFic3RyYWN0TG9hZGVyL2NvbXBsZXRlOmV2ZW50In19e3svY3Jvc3NMaW5rfX0gZXZlbnQKCSAqIEBtZXRob2QgX3NlbmRDb21wbGV0ZQoJICogQHByb3RlY3RlZAoJICovCglwLl9zZW5kQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7CgkJaWYgKHRoaXMuX2lzQ2FuY2VsZWQoKSkgeyByZXR1cm47IH0KCgkJdGhpcy5sb2FkZWQgPSB0cnVlOwoKCQl2YXIgZXZlbnQgPSBuZXcgY3JlYXRlanMuRXZlbnQoImNvbXBsZXRlIik7CgkJZXZlbnQucmF3UmVzdWx0ID0gdGhpcy5fcmF3UmVzdWx0OwoKCQlpZiAodGhpcy5fcmVzdWx0ICE9IG51bGwpIHsKCQkJZXZlbnQucmVzdWx0ID0gdGhpcy5fcmVzdWx0OwoJCX0KCgkJdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKCX07CgoJLyoqCgkgKiBEaXNwYXRjaCBhbiBlcnJvciB7eyNjcm9zc0xpbmsgIkV2ZW50In19e3svY3Jvc3NMaW5rfX0uIFBsZWFzZSBzZWUgdGhlIHt7I2Nyb3NzTGluayAiQWJzdHJhY3RMb2FkZXIvZXJyb3I6ZXZlbnQifX17ey9jcm9zc0xpbmt9fQoJICogZXZlbnQgZm9yIGRldGFpbHMgb24gdGhlIGV2ZW50IHBheWxvYWQuCgkgKiBAbWV0aG9kIF9zZW5kRXJyb3IKCSAqIEBwYXJhbSB7RXJyb3JFdmVudH0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIGVycm9yIHByb3BlcnRpZXMuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXAuX3NlbmRFcnJvciA9IGZ1bmN0aW9uIChldmVudCkgewoJCWlmICh0aGlzLl9pc0NhbmNlbGVkKCkgfHwgIXRoaXMuaGFzRXZlbnRMaXN0ZW5lcigiZXJyb3IiKSkgeyByZXR1cm47IH0KCQlpZiAoZXZlbnQgPT0gbnVsbCkgewoJCQlldmVudCA9IG5ldyBjcmVhdGVqcy5FcnJvckV2ZW50KCJQUkVMT0FEX0VSUk9SX0VNUFRZIik7IC8vIFRPRE86IFBvcHVsYXRlIGVycm9yCgkJfQoJCXRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7Cgl9OwoKCS8qKgoJICogRGV0ZXJtaW5lIGlmIHRoZSBsb2FkIGhhcyBiZWVuIGNhbmNlbGVkLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCBtZXRob2QgY2FsbHMgb3IgYXN5bmNocm9ub3VzIGV2ZW50cwoJICogZG8gbm90IGNhdXNlIGlzc3VlcyBhZnRlciB0aGUgcXVldWUgaGFzIGJlZW4gY2xlYW5lZCB1cC4KCSAqIEBtZXRob2QgX2lzQ2FuY2VsZWQKCSAqIEByZXR1cm4ge0Jvb2xlYW59IElmIHRoZSBsb2FkZXIgaGFzIGJlZW4gY2FuY2VsZWQuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXAuX2lzQ2FuY2VsZWQgPSBmdW5jdGlvbiAoKSB7CgkJaWYgKHdpbmRvdy5jcmVhdGVqcyA9PSBudWxsIHx8IHRoaXMuY2FuY2VsZWQpIHsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX07CgoJLyoqCgkgKiBBIGN1c3RvbSByZXN1bHQgZm9ybWF0dGVyIGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQganVzdCBiZWZvcmUgYSByZXF1ZXN0IGRpc3BhdGNoZXMgaXRzIGNvbXBsZXRlIGV2ZW50LiBNb3N0CgkgKiBsb2FkZXIgdHlwZXMgYWxyZWFkeSBoYXZlIGFuIGludGVybmFsIGZvcm1hdHRlciwgYnV0IHRoaXMgY2FuIGJlIHVzZXItb3ZlcnJpZGRlbiBmb3IgY3VzdG9tIGZvcm1hdHRpbmcuIFRoZQoJICogZm9ybWF0dGVkIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBvbiBMb2FkZXJzIHVzaW5nIHt7I2Nyb3NzTGluayAiZ2V0UmVzdWx0In19e3svY3Jvc3NMaW5rfX0sIGFuZCBwYXNzaW5nIGB0cnVlYC4KCSAqIEBwcm9wZXJ0eSByZXN1bHRGb3JtYXR0ZXIKCSAqIEB0eXBlIEZ1bmN0aW9uCgkgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBmb3JtYXR0ZWQgcmVzdWx0CgkgKiBAc2luY2UgMC42LjAKCSAqLwoJcC5yZXN1bHRGb3JtYXR0ZXIgPSBudWxsOyAvL1RPRE86IEFkZCBzdXBwb3J0IGZvciBhc3luYyBmb3JtYXR0aW5nLgoKCS8qKgoJICogSGFuZGxlIGV2ZW50cyBmcm9tIGludGVybmFsIHJlcXVlc3RzLiBCeSBkZWZhdWx0LCBsb2FkZXJzIHdpbGwgaGFuZGxlLCBhbmQgcmVkaXNwYXRjaCB0aGUgbmVjZXNzYXJ5IGV2ZW50cywgYnV0CgkgKiB0aGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgY3VzdG9tIGJlaGF2aW91cnMuCgkgKiBAbWV0aG9kIGhhbmRsZUV2ZW50CgkgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdGhhdCB0aGUgaW50ZXJuYWwgcmVxdWVzdCBkaXNwYXRjaGVzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDAuNi4wCgkgKi8KCXAuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHsKCQlzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKCQkJY2FzZSAiY29tcGxldGUiOgoJCQkJdGhpcy5fcmF3UmVzdWx0ID0gZXZlbnQudGFyZ2V0Ll9yZXNwb25zZTsKCQkJCXZhciByZXN1bHQgPSB0aGlzLnJlc3VsdEZvcm1hdHRlciAmJiB0aGlzLnJlc3VsdEZvcm1hdHRlcih0aGlzKTsKCQkJCXZhciBfdGhpcyA9IHRoaXM7CgkJCQlpZiAocmVzdWx0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHsKCQkJCQlyZXN1bHQoZnVuY3Rpb24ocmVzdWx0KSB7CgkJCQkJCV90aGlzLl9yZXN1bHQgPSByZXN1bHQ7CgkJCQkJCV90aGlzLl9zZW5kQ29tcGxldGUoKTsKCQkJCQl9KTsKCQkJCX0gZWxzZSB7CgkJCQkJdGhpcy5fcmVzdWx0ID0gIHJlc3VsdCB8fCB0aGlzLl9yYXdSZXN1bHQ7CgkJCQkJdGhpcy5fc2VuZENvbXBsZXRlKCk7CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAicHJvZ3Jlc3MiOgoJCQkJdGhpcy5fc2VuZFByb2dyZXNzKGV2ZW50KTsKCQkJCWJyZWFrOwoJCQljYXNlICJlcnJvciI6CgkJCQl0aGlzLl9zZW5kRXJyb3IoZXZlbnQpOwoJCQkJYnJlYWs7CgkJCWNhc2UgImxvYWRzdGFydCI6CgkJCQl0aGlzLl9zZW5kTG9hZFN0YXJ0KCk7CgkJCQlicmVhazsKCQkJY2FzZSAiYWJvcnQiOgoJCQljYXNlICJ0aW1lb3V0IjoKCQkJCWlmICghdGhpcy5faXNDYW5jZWxlZCgpKSB7CgkJCQkJdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50LnR5cGUpOwoJCQkJfQoJCQkJYnJlYWs7CgkJfQoJfTsKCgkvKioKCSAqIEBtZXRob2QgYnVpbGRQYXRoCgkgKiBAcHJvdGVjdGVkCgkgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIHt7I2Nyb3NzTGluayAiUmVxdWVzdFV0aWxzIn19e3svY3Jvc3NMaW5rfX0gbWV0aG9kIHt7I2Nyb3NzTGluayAiUmVxdWVzdFV0aWxzL2J1aWxkUGF0aCJ9fXt7L2Nyb3NzTGlua319CgkgKiBpbnN0ZWFkLgoJICovCglwLmJ1aWxkUGF0aCA9IGZ1bmN0aW9uIChzcmMsIGRhdGEpIHsKCQlyZXR1cm4gY3JlYXRlanMuUmVxdWVzdFV0aWxzLmJ1aWxkUGF0aChzcmMsIGRhdGEpOwoJfTsKCgkvKioKCSAqIEBtZXRob2QgdG9TdHJpbmcKCSAqIEByZXR1cm4ge1N0cmluZ30gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluc3RhbmNlLgoJICovCglwLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewoJCXJldHVybiAiW1ByZWxvYWRKUyBBYnN0cmFjdExvYWRlcl0iOwoJfTsKCgljcmVhdGVqcy5BYnN0cmFjdExvYWRlciA9IGNyZWF0ZWpzLnByb21vdGUoQWJzdHJhY3RMb2FkZXIsICJFdmVudERpc3BhdGNoZXIiKTsKCn0oKSk7Cg==
//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer