CiAgICAgICBJbmRleCBvZiBEb2N1bWVudGF0aW9uIGZvciBQZW9wbGUgSW50ZXJlc3RlZCBpbiBXcml0aW5nIGFuZC9vcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgVW5kZXJzdGFuZGluZyB0aGUgTGludXggS2VybmVsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBKdWFuLU1hcmlhbm8gZGUgR295ZW5lY2hlIDxqbXNleWFzQGRpdC51cG0uZXM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi8qCiAqIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IG1heSBiZSBmb3VuZCBhdDoKICogICBodHRwOi8vd3d3LmRpdC51cG0uZXMvfmptc2V5YXMvbGludXgva2VybmVsL2hhY2tlcnMtZG9jcy5odG1sCiAqLwoKICAgVGhlIG5lZWQgZm9yIGEgZG9jdW1lbnQgbGlrZSB0aGlzIG9uZSBiZWNhbWUgYXBwYXJlbnQgaW4gdGhlCiAgIGxpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QgYXMgdGhlIHNhbWUgcXVlc3Rpb25zLCBhc2tpbmcgZm9yIHBvaW50ZXJzCiAgIHRvIGluZm9ybWF0aW9uLCBhcHBlYXJlZCBhZ2FpbiBhbmQgYWdhaW4uCiAgIAogICBGb3J0dW5hdGVseSwgYXMgbW9yZSBhbmQgbW9yZSBwZW9wbGUgZ2V0IHRvIEdOVS9MaW51eCwgbW9yZSBhbmQgbW9yZQogICBnZXQgaW50ZXJlc3RlZCBpbiB0aGUgS2VybmVsLiBCdXQgcmVhZGluZyB0aGUgc291cmNlcyBpcyBub3QgYWx3YXlzCiAgIGVub3VnaC4gSXQgaXMgZWFzeSB0byB1bmRlcnN0YW5kIHRoZSBjb2RlLCBidXQgbWlzcyB0aGUgY29uY2VwdHMsIHRoZQogICBwaGlsb3NvcGh5IGFuZCBkZXNpZ24gZGVjaXNpb25zIGJlaGluZCB0aGlzIGNvZGUuCiAgIAogICBVbmZvcnR1bmF0ZWx5LCBub3QgbWFueSBkb2N1bWVudHMgYXJlIGF2YWlsYWJsZSBmb3IgYmVnaW5uZXJzIHRvCiAgIHN0YXJ0LiBBbmQsIGV2ZW4gaWYgdGhleSBleGlzdCwgdGhlcmUgd2FzIG5vICJ3ZWxsLWtub3duIiBwbGFjZSB3aGljaAogICBrZXB0IHRyYWNrIG9mIHRoZW0uIFRoZXNlIGxpbmVzIHRyeSB0byBjb3ZlciB0aGlzIGxhY2suIEFsbCBkb2N1bWVudHMKICAgYXZhaWxhYmxlIG9uIGxpbmUga25vd24gYnkgdGhlIGF1dGhvciBhcmUgbGlzdGVkLCB3aGlsZSBzb21lIHJlZmVyZW5jZQogICBib29rcyBhcmUgYWxzbyBtZW50aW9uZWQuCiAgIAogICBQTEVBU0UsIGlmIHlvdSBrbm93IGFueSBwYXBlciBub3QgbGlzdGVkIGhlcmUgb3Igd3JpdGUgYSBuZXcgZG9jdW1lbnQsCiAgIHNlbmQgbWUgYW4gZS1tYWlsLCBhbmQgSSdsbCBpbmNsdWRlIGEgcmVmZXJlbmNlIHRvIGl0IGhlcmUuIEFueQogICBjb3JyZWN0aW9ucywgaWRlYXMgb3IgY29tbWVudHMgYXJlIGFsc28gd2VsY29tZWQuCiAgIAogICBUaGUgcGFwZXJzIHRoYXQgZm9sbG93IGFyZSBsaXN0ZWQgaW4gbm8gcGFydGljdWxhciBvcmRlci4gQWxsIGFyZQogICBjYXRhbG9nZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczogdGhlIGRvY3VtZW50J3MgIlRpdGxlIiwgdGhlCiAgICJBdXRob3IiL3MsIHRoZSAiVVJMIiB3aGVyZSB0aGV5IGNhbiBiZSBmb3VuZCwgc29tZSAiS2V5d29yZHMiIGhlbHBmdWwKICAgd2hlbiBzZWFyY2hpbmcgZm9yIHNwZWNpZmljIHRvcGljcywgYW5kIGEgYnJpZWYgIkRlc2NyaXB0aW9uIiBvZiB0aGUKICAgRG9jdW1lbnQuCiAgIAogICBFbmpveSEKICAgCiAgICAgT04tTElORSBET0NTOgogICAgICAgCiAgICAgKiBUaXRsZTogIkxpbnV4IERldmljZSBEcml2ZXJzLCBUaGlyZCBFZGl0aW9uIgogICAgICAgQXV0aG9yOiBKb25hdGhhbiBDb3JiZXQsIEFsZXNzYW5kcm8gUnViaW5pLCBHcmVnIEtyb2FoLUhhcnRtYW4KICAgICAgIFVSTDogaHR0cDovL2x3bi5uZXQvS2VybmVsL0xERDMvCiAgICAgICBEZXNjcmlwdGlvbjogQSA2MDAtcGFnZSBib29rIGNvdmVyaW5nIHRoZSAoMi42LjEwKSBkcml2ZXIKICAgICAgIHByb2dyYW1taW5nIEFQSSBhbmQga2VybmVsIGhhY2tpbmcgaW4gZ2VuZXJhbC4gIEF2YWlsYWJsZSB1bmRlciB0aGUKICAgICAgIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjAgbGljZW5zZS4KCiAgICAgKiBUaXRsZTogIlRoZSBMaW51eCBLZXJuZWwiCiAgICAgICBBdXRob3I6IERhdmlkIEEuIFJ1c2xpbmcuCiAgICAgICBVUkw6IGh0dHA6Ly93d3cudGxkcC5vcmcvTERQL3Rsay90bGsuaHRtbAogICAgICAgS2V5d29yZHM6IGV2ZXJ5dGhpbmchLCBib29rLgogICAgICAgRGVzY3JpcHRpb246IE9uIGxpbmUsIDIwMCBwYWdlcyBib29rIGRlc2NyaWJpbmcgbW9zdCBhc3BlY3RzIG9mCiAgICAgICB0aGUgTGludXggS2VybmVsLiBQcm9iYWJseSwgdGhlIGZpcnN0IHJlZmVyZW5jZSBmb3IgYmVnaW5uZXJzLgogICAgICAgTG90cyBvZiBpbGx1c3RyYXRpb25zIGV4cGxhaW5pbmcgZGF0YSBzdHJ1Y3R1cmVzIHVzZSBhbmQKICAgICAgIHJlbGF0aW9uc2hpcHMgaW4gdGhlIHB1cmVzdCBSaWNoYXJkIFcuIFN0ZXZlbnMnIHN0eWxlLiBDb250ZW50czoKICAgICAgICIxLi1IYXJkd2FyZSBCYXNpY3MsIDIuLVNvZnR3YXJlIEJhc2ljcywgMy4tTWVtb3J5IE1hbmFnZW1lbnQsCiAgICAgICA0Li1Qcm9jZXNzZXMsIDUuLUludGVycHJvY2VzcyBDb21tdW5pY2F0aW9uIE1lY2hhbmlzbXMsIDYuLVBDSSwKICAgICAgIDcuLUludGVycnVwdHMgYW5kIEludGVycnVwdCBIYW5kbGluZywgOC4tRGV2aWNlIERyaXZlcnMsIDkuLVRoZQogICAgICAgRmlsZSBzeXN0ZW0sIDEwLi1OZXR3b3JrcywgMTEuLUtlcm5lbCBNZWNoYW5pc21zLCAxMi4tTW9kdWxlcywKICAgICAgIDEzLi1UaGUgTGludXggS2VybmVsIFNvdXJjZXMsIEEuLUxpbnV4IERhdGEgU3RydWN0dXJlcywgQi4tVGhlCiAgICAgICBBbHBoYSBBWFAgUHJvY2Vzc29yLCBDLi1Vc2VmdWwgV2ViIGFuZCBGVFAgU2l0ZXMsIEQuLVRoZSBHTlUKICAgICAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIEdsb3NzYXJ5Ii4gSW4gc2hvcnQ6IGEgbXVzdCBoYXZlLgogICAgICAgCiAgICAgKiBUaXRsZTogIlRoZSBMaW51eCBLZXJuZWwgSGFja2VycycgR3VpZGUiCiAgICAgICBBdXRob3I6IE1pY2hhZWwgSy5Kb2huc29uIGFuZCBvdGhlcnMuCiAgICAgICBVUkw6IGh0dHA6Ly93d3cudGxkcC5vcmcvTERQL2toZy9IeXBlck5ld3MvZ2V0L2toZy5odG1sCiAgICAgICBLZXl3b3JkczogZXZlcnl0aGluZyEKICAgICAgIERlc2NyaXB0aW9uOiBObyBtb3JlIFBvc3RzY3JpcHQgYm9vay1saWtlIHZlcnNpb24uIE9ubHkgSFRNTCBub3cuCiAgICAgICBNYW55IHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkLiBUaGUgaW50ZXJmYWNlIGlzIHNpbWlsYXIgdG8gd2ViCiAgICAgICBhdmFpbGFibGUgbWFpbGluZyBsaXN0cyBhcmNoaXZlcy4gWW91IGNhbiBmaW5kIHNvbWUgYXJ0aWNsZXMgYW5kCiAgICAgICB0aGVuIHNvbWUgbWFpbHMgYXNraW5nIHF1ZXN0aW9ucyBhYm91dCB0aGVtIGFuZC9vciBjb21wbGVtZW50aW5nCiAgICAgICBwcmV2aW91cyBjb250cmlidXRpb25zLiBBIGxpdHRsZSBiaXQgYW5hcmNoaWMgaW4gdGhpcyBhc3BlY3QsIGJ1dAogICAgICAgd2l0aCBzb21lIHZhbHVhYmxlIGluZm9ybWF0aW9uIGluIHNvbWUgY2FzZXMuCiAgICAgICAKICAgICAqIFRpdGxlOiAiQ29uY2VwdHVhbCBBcmNoaXRlY3R1cmUgb2YgdGhlIExpbnV4IEtlcm5lbCIKICAgICAgIEF1dGhvcjogSXZhbiBULiBCb3dtYW4uCiAgICAgICBVUkw6IGh0dHA6Ly9wbGcudXdhdGVybG9vLmNhL35pdGJvd21hbi9wYXBlcnMvQ1M3NDZHLWExLmh0bWwKICAgICAgIEtleXdvcmRzOiBjb25jZXB0dWFsIHNvZnR3YXJlIGFycXVpdGVjdHVyZSwgZXh0cmFjdGVkIGRlc2lnbiwKICAgICAgIHJldmVyc2UgZW5naW5lZXJpbmcsIHN5c3RlbSBzdHJ1Y3R1cmUuCiAgICAgICBEZXNjcmlwdGlvbjogQ29uY2VwdHVhbCBzb2Z0d2FyZSBhcnF1aXRlY3R1cmUgb2YgdGhlIExpbnV4IGtlcm5lbCwKICAgICAgIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHNvdXJjZSBjb2RlLiBWZXJ5IGRldGFpbGVkLiBHb29kCiAgICAgICBmaWd1cmVzLiBHaXZlcyBnb29kIG92ZXJhbGwga2VybmVsIHVuZGVyc3RhbmRpbmcuCiAgICAgICAKICAgICAqIFRpdGxlOiAiQ29uY3JldGUgQXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBLZXJuZWwiCiAgICAgICBBdXRob3I6IEl2YW4gVC4gQm93bWFuLCBTYWhlZW0gU2lkZGlxaSwgYW5kIE1leWVyIEMuIFRhbnVhbi4KICAgICAgIFVSTDogaHR0cDovL3BsZy51d2F0ZXJsb28uY2Evfml0Ym93bWFuL3BhcGVycy9DUzc0NkctYTIuaHRtbAogICAgICAgS2V5d29yZHM6IGNvbmNyZXRlIGFycXVpdGVjdHVyZSwgZXh0cmFjdGVkIGRlc2lnbiwgcmV2ZXJzZQogICAgICAgZW5naW5lZXJpbmcsIHN5c3RlbSBzdHJ1Y3R1cmUsIGRlcGVuZGVuY2llcy4KICAgICAgIERlc2NyaXB0aW9uOiBDb25jcmV0ZSBhcnF1aXRlY3R1cmUgb2YgdGhlIExpbnV4IGtlcm5lbCwKICAgICAgIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHNvdXJjZSBjb2RlLiBWZXJ5IGRldGFpbGVkLiBHb29kCiAgICAgICBmaWd1cmVzLiBHaXZlcyBnb29kIG92ZXJhbGwga2VybmVsIHVuZGVyc3RhbmRpbmcuIFRoaXMgcGFwZXJzCiAgICAgICBmb2N1cyBvbiBsb3dlciBkZXRhaWxzIHRoYW4gaXRzIHByZWRlY2Vzc29yIChmaWxlcywgdmFyaWFibGVzLi4uKS4KICAgICAgIAogICAgICogVGl0bGU6ICJMaW51eCBhcyBhIENhc2UgU3R1ZHk6IEl0cyBFeHRyYWN0ZWQgU29mdHdhcmUKICAgICAgIEFyY2hpdGVjdHVyZSIKICAgICAgIEF1dGhvcjogSXZhbiBULiBCb3dtYW4sIFJpY2hhcmQgQy4gSG9sdCBhbmQgTmVpbCBWLiBCcmV3c3Rlci4KICAgICAgIFVSTDogaHR0cDovL3BsZy51d2F0ZXJsb28uY2Evfml0Ym93bWFuL3BhcGVycy9saW51eGNhc2UuaHRtbAogICAgICAgS2V5d29yZHM6IHNvZnR3YXJlIGFyY2hpdGVjdHVyZSwgYXJjaGl0ZWN0dXJlIHJlY292ZXJ5LAogICAgICAgcmVkb2N1bWVudGF0aW9uLgogICAgICAgRGVzY3JpcHRpb246IFBhcGVyIGFwcGVhcmVkIGF0IElDU0UnOTksIExvcyBBbmdlbGVzLCBNYXkgMTYtMjIsCiAgICAgICAxOTk5LiBBIG1peHR1cmUgb2YgdGhlIHByZXZpb3VzIHR3byBkb2N1bWVudHMgZnJvbSB0aGUgc2FtZQogICAgICAgYXV0aG9yLgogICAgICAgCiAgICAgKiBUaXRsZTogIk92ZXJ2aWV3IG9mIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIgogICAgICAgQXV0aG9yOiBSaWNoYXJkIEdvb2NoLgogICAgICAgVVJMOiBodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC92ZnMudHh0CiAgICAgICBLZXl3b3JkczogVkZTLCBGaWxlIFN5c3RlbSwgbW91bnRpbmcgZmlsZXN5c3RlbXMsIG9wZW5pbmcgZmlsZXMsCiAgICAgICBkZW50cmllcywgZGNhY2hlLgogICAgICAgRGVzY3JpcHRpb246IEJyaWVmIGludHJvZHVjdGlvbiB0byB0aGUgTGludXggVmlydHVhbCBGaWxlIFN5c3RlbS4KICAgICAgIFdoYXQgaXMgaXQsIGhvdyBpdCB3b3Jrcywgb3BlcmF0aW9ucyB0YWtlbiB3aGVuIG9wZW5pbmcgYSBmaWxlIG9yCiAgICAgICBtb3VudGluZyBhIGZpbGUgc3lzdGVtIGFuZCBkZXNjcmlwdGlvbiBvZiBpbXBvcnRhbnQgZGF0YQogICAgICAgc3RydWN0dXJlcyBleHBsYWluaW5nIHRoZSBwdXJwb3NlIG9mIGVhY2ggb2YgdGhlaXIgZW50cmllcy4KICAgICAgIAogICAgICogVGl0bGU6ICJUaGUgTGludXggUkFJRC0xLCA0LCA1IENvZGUiCiAgICAgICBBdXRob3I6IEluZ28gTW9sbmFyLCBHYWRpIE94bWFuIGFuZCBNaWd1ZWwgZGUgSWNhemEuCiAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlNDQvMjM5MS5odG1sCiAgICAgICBLZXl3b3JkczogUkFJRCwgTUQgZHJpdmVyLgogICAgICAgRGVzY3JpcHRpb246IExpbnV4IEpvdXJuYWwgS2VybmVsIEtvcm5lciBhcnRpY2xlLiBIZXJlIGlzIGl0J3MKICAgICAgIGFic3RyYWN0OiAiQSBkZXNjcmlwdGlvbiBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJBSUQtMSwKICAgICAgIFJBSUQtNCBhbmQgUkFJRC01IHBlcnNvbmFsaXRpZXMgb2YgdGhlIE1EIGRldmljZSBkcml2ZXIgaW4gdGhlCiAgICAgICBMaW51eCBrZXJuZWwsIHByb3ZpZGluZyB1c2VycyB3aXRoIGhpZ2ggcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmxlLAogICAgICAgc2Vjb25kYXJ5LXN0b3JhZ2UgY2FwYWJpbGl0eSB1c2luZyBzb2Z0d2FyZSIuCiAgICAgICAKICAgICAqIFRpdGxlOiAiRHluYW1pYyBLZXJuZWxzOiBNb2R1bGFyaXplZCBEZXZpY2UgRHJpdmVycyIKICAgICAgIEF1dGhvcjogQWxlc3NhbmRybyBSdWJpbmkuCiAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlMjMvMTIxOS5odG1sCiAgICAgICBLZXl3b3JkczogZGV2aWNlIGRyaXZlciwgbW9kdWxlLCBsb2FkaW5nL3VubG9hZGluZyBtb2R1bGVzLAogICAgICAgYWxsb2NhdGluZyByZXNvdXJjZXMuCiAgICAgICBEZXNjcmlwdGlvbjogTGludXggSm91cm5hbCBLZXJuZWwgS29ybmVyIGFydGljbGUuIEhlcmUgaXMgaXQncwogICAgICAgYWJzdHJhY3Q6ICJUaGlzIGlzIHRoZSBmaXJzdCBvZiBhIHNlcmllcyBvZiBmb3VyIGFydGljbGVzCiAgICAgICBjby1hdXRob3JlZCBieSBBbGVzc2FuZHJvIFJ1YmluaSBhbmQgR2VvcmcgWmV6Y2h3aXR6IHdoaWNoIHByZXNlbnQKICAgICAgIGEgcHJhY3RpY2FsIGFwcHJvYWNoIHRvIHdyaXRpbmcgTGludXggZGV2aWNlIGRyaXZlcnMgYXMga2VybmVsCiAgICAgICBsb2FkYWJsZSBtb2R1bGVzLiBUaGlzIGluc3RhbGxtZW50IHByZXNlbnRzIGFuIGludHJvZHVjdGlvbiB0byB0aGUKICAgICAgIHRvcGljLCBwcmVwYXJpbmcgdGhlIHJlYWRlciB0byB1bmRlcnN0YW5kIG5leHQgbW9udGgncwogICAgICAgaW5zdGFsbG1lbnQiLgogICAgICAgCiAgICAgKiBUaXRsZTogIkR5bmFtaWMgS2VybmVsczogRGlzY292ZXJ5IgogICAgICAgQXV0aG9yOiBBbGVzc2FuZHJvIFJ1YmluaS4KICAgICAgIFVSTDogaHR0cDovL3d3dzIubGludXhqb3VybmFsLmNvbS9sai1pc3N1ZXMvaXNzdWUyNC8xMjIwLmh0bWwKICAgICAgIEtleXdvcmRzOiBjaGFyYWN0ZXIgZHJpdmVyLCBpbml0X21vZHVsZSwgY2xlYW5fdXAgbW9kdWxlLAogICAgICAgYXV0b2RldGVjdGlvbiwgbWF5b3IgbnVtYmVyLCBtaW5vciBudW1iZXIsIGZpbGUgb3BlcmF0aW9ucywKICAgICAgIG9wZW4oKSwgY2xvc2UoKS4KICAgICAgIERlc2NyaXB0aW9uOiBMaW51eCBKb3VybmFsIEtlcm5lbCBLb3JuZXIgYXJ0aWNsZS4gSGVyZSBpcyBpdCdzCiAgICAgICBhYnN0cmFjdDogIlRoaXMgYXJ0aWNsZSwgdGhlIHNlY29uZCBvZiBmb3VyLCBpbnRyb2R1Y2VzIHBhcnQgb2YKICAgICAgIHRoZSBhY3R1YWwgY29kZSB0byBjcmVhdGUgY3VzdG9tIG1vZHVsZSBpbXBsZW1lbnRpbmcgYSBjaGFyYWN0ZXIKICAgICAgIGRldmljZSBkcml2ZXIuIEl0IGRlc2NyaWJlcyB0aGUgY29kZSBmb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZAogICAgICAgY2xlYW51cCwgYXMgd2VsbCBhcyB0aGUgb3BlbigpIGFuZCBjbG9zZSgpIHN5c3RlbSBjYWxscyIuCiAgICAgICAKICAgICAqIFRpdGxlOiAiVGhlIERldmlsJ3MgaW4gdGhlIERldGFpbHMiCiAgICAgICBBdXRob3I6IEdlb3JnIHYuIFplenNjaHdpdHogYW5kIEFsZXNzYW5kcm8gUnViaW5pLgogICAgICAgVVJMOiBodHRwOi8vd3d3Mi5saW51eGpvdXJuYWwuY29tL2xqLWlzc3Vlcy9pc3N1ZTI1LzEyMjEuaHRtbAogICAgICAgS2V5d29yZHM6IHJlYWQoKSwgd3JpdGUoKSwgc2VsZWN0KCksIGlvY3RsKCksIGJsb2NraW5nL25vbgogICAgICAgYmxvY2tpbmcgbW9kZSwgaW50ZXJydXB0IGhhbmRsZXIuCiAgICAgICBEZXNjcmlwdGlvbjogTGludXggSm91cm5hbCBLZXJuZWwgS29ybmVyIGFydGljbGUuIEhlcmUgaXMgaXQncwogICAgICAgYWJzdHJhY3Q6ICJUaGlzIGFydGljbGUsIHRoZSB0aGlyZCBvZiBmb3VyIG9uIHdyaXRpbmcgY2hhcmFjdGVyCiAgICAgICBkZXZpY2UgZHJpdmVycywgaW50cm9kdWNlcyBjb25jZXB0cyBvZiByZWFkaW5nLCB3cml0aW5nLCBhbmQgdXNpbmcKICAgICAgIGlvY3RsLWNhbGxzIi4KICAgICAgIAogICAgICogVGl0bGU6ICJEaXNzZWN0aW5nIEludGVycnVwdHMgYW5kIEJyb3dzaW5nIERNQSIKICAgICAgIEF1dGhvcjogQWxlc3NhbmRybyBSdWJpbmkgYW5kIEdlb3JnIHYuIFplenNjaHdpdHouCiAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlMjYvMTIyMi5odG1sCiAgICAgICBLZXl3b3JkczogaW50ZXJydXB0cywgaXJxcywgRE1BLCBib3R0b20gaGFsdmVzLCB0YXNrIHF1ZXVlcy4KICAgICAgIERlc2NyaXB0aW9uOiBMaW51eCBKb3VybmFsIEtlcm5lbCBLb3JuZXIgYXJ0aWNsZS4gSGVyZSBpcyBpdCdzCiAgICAgICBhYnN0cmFjdDogIlRoaXMgaXMgdGhlIGZvdXJ0aCBpbiBhIHNlcmllcyBvZiBhcnRpY2xlcyBhYm91dAogICAgICAgd3JpdGluZyBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlcnMgYXMgbG9hZGFibGUga2VybmVsIG1vZHVsZXMuIFRoaXMKICAgICAgIG1vbnRoLCB3ZSBmdXJ0aGVyIGludmVzdGlnYXRlIHRoZSBmaWVsZCBvZiBpbnRlcnJ1cHQgaGFuZGxpbmcuCiAgICAgICBUaG91Z2ggaXQgaXMgY29uY2VwdHVhbGx5IHNpbXBsZSwgcHJhY3RpY2FsIGxpbWl0YXRpb25zIGFuZAogICAgICAgY29uc3RyYWludHMgbWFrZSB0aGlzIGFuIGBgaW50ZXJlc3RpbmcnJyBwYXJ0IG9mIGRldmljZSBkcml2ZXIKICAgICAgIHdyaXRpbmcsIGFuZCBzZXZlcmFsIGRpZmZlcmVudCBmYWNpbGl0aWVzIGhhdmUgYmVlbiBwcm92aWRlZCBmb3IKICAgICAgIGRpZmZlcmVudCBzaXR1YXRpb25zLiBXZSBhbHNvIGludmVzdGlnYXRlIHRoZSBjb21wbGV4IHRvcGljIG9mCiAgICAgICBETUEiLgogICAgICAgCiAgICAgKiBUaXRsZTogIkRldmljZSBEcml2ZXJzIENvbmNsdWRlZCIKICAgICAgIEF1dGhvcjogR2Vvcmcgdi4gWmV6c2Nod2l0ei4KICAgICAgIFVSTDogaHR0cDovL3d3dzIubGludXhqb3VybmFsLmNvbS9sai1pc3N1ZXMvaXNzdWUyOC8xMjg3Lmh0bWwKICAgICAgIEtleXdvcmRzOiBhZGRyZXNzIHNwYWNlcywgcGFnZXMsIHBhZ2luYXRpb24sIHBhZ2UgbWFuYWdlbWVudCwKICAgICAgIGRlbWFuZCBsb2FkaW5nLCBzd2FwcGluZywgbWVtb3J5IHByb3RlY3Rpb24sIG1lbW9yeSBtYXBwaW5nLCBtbWFwLAogICAgICAgdmlydHVhbCBtZW1vcnkgYXJlYXMgKFZNQXMpLCB2cmVtYXAsIFBDSS4KICAgICAgIERlc2NyaXB0aW9uOiBGaW5hbGx5LCB0aGUgYWJvdmUgdHVybmVkIG91dCBpbnRvIGEgZml2ZSBhcnRpY2xlcwogICAgICAgc2VyaWVzLiBUaGlzIGxhdGVzdCBvbmUncyBpbnRyb2R1Y3Rpb24gcmVhZHM6ICJUaGlzIGlzIHRoZSBsYXN0IG9mCiAgICAgICBmaXZlIGFydGljbGVzIGFib3V0IGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycy4gSW4gdGhpcyBmaW5hbAogICAgICAgc2VjdGlvbiwgR2VvcmcgZGVhbHMgd2l0aCBtZW1vcnkgbWFwcGluZyBkZXZpY2VzLCBiZWdpbm5pbmcgd2l0aAogICAgICAgYW4gb3ZlcmFsbCBkZXNjcmlwdGlvbiBvZiB0aGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VwdHMiLgogICAgICAgCiAgICAgKiBUaXRsZTogIk5ldHdvcmsgQnVmZmVycyBBbmQgTWVtb3J5IE1hbmFnZW1lbnQiCiAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgVVJMOiBodHRwOi8vd3d3Mi5saW51eGpvdXJuYWwuY29tL2xqLWlzc3Vlcy9pc3N1ZTMwLzEzMTIuaHRtbAogICAgICAgS2V5d29yZHM6IHNrX2J1ZmZzLCBuZXR3b3JrIGRldmljZXMsIHByb3RvY29sL2xpbmsgbGF5ZXIKICAgICAgIHZhcmlhYmxlcywgbmV0d29yayBkZXZpY2VzIGZsYWdzLCB0cmFuc21pdCwgcmVjZWl2ZSwKICAgICAgIGNvbmZpZ3VyYXRpb24sIG11bHRpY2FzdC4KICAgICAgIERlc2NyaXB0aW9uOiBMaW51eCBKb3VybmFsIEtlcm5lbCBLb3JuZXIuIEhlcmUgaXMgdGhlIGFic3RyYWN0OgogICAgICAgIldyaXRpbmcgYSBuZXR3b3JrIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IGlzIGZ1bmRhbWVudGFsbHkKICAgICAgIHNpbXBsZS0tLW1vc3Qgb2YgdGhlIGNvbXBsZXhpdHkgKG90aGVyIHRoYW4gdGFsa2luZyB0byB0aGUKICAgICAgIGhhcmR3YXJlKSBpbnZvbHZlcyBtYW5hZ2luZyBuZXR3b3JrIHBhY2tldHMgaW4gbWVtb3J5Ii4KICAgICAgIAogICAgICogVGl0bGU6ICJXcml0aW5nIExpbnV4IERldmljZSBEcml2ZXJzIgogICAgICAgQXV0aG9yOiBNaWNoYWVsIEsuIEpvaG5zb24uCiAgICAgICBVUkw6IGh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9qb2huc29ubS9kZXZpY2VzLmh0bWwKICAgICAgIEtleXdvcmRzOiBmaWxlcywgVkZTLCBmaWxlIG9wZXJhdGlvbnMsIGtlcm5lbCBpbnRlcmZhY2UsIGNoYXJhY3RlcgogICAgICAgdnMgYmxvY2sgZGV2aWNlcywgSS9PIGFjY2VzcywgaGFyZHdhcmUgaW50ZXJydXB0cywgRE1BLCBhY2Nlc3MgdG8KICAgICAgIHVzZXIgbWVtb3J5LCBtZW1vcnkgYWxsb2NhdGlvbiwgdGltZXJzLgogICAgICAgRGVzY3JpcHRpb246IEludHJvZHVjdG9yeSA1MC1taW51dGVzIChzaWMpIHR1dG9yaWFsIG9uIHdyaXRpbmcKICAgICAgIGRldmljZSBkcml2ZXJzLiAxMiBwYWdlcyB3cml0dGVuIGJ5IHRoZSBzYW1lIGF1dGhvciBvZiB0aGUgIktlcm5lbAogICAgICAgSGFja2VycycgR3VpZGUiIHdoaWNoIGdpdmUgYSB2ZXJ5IGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHRvcGljLgogICAgICAgCiAgICAgKiBUaXRsZTogIlRoZSBWZW51cyBrZXJuZWwgaW50ZXJmYWNlIgogICAgICAgQXV0aG9yOiBQZXRlciBKLiBCcmFhbS4KICAgICAgIFVSTDoKICAgICAgIGh0dHA6Ly93d3cuY29kYS5jcy5jbXUuZWR1L2RvYy9odG1sL2tlcm5lbC12ZW51cy1wcm90b2NvbC5odG1sCiAgICAgICBLZXl3b3JkczogY29kYSwgZmlsZXN5c3RlbSwgdmVudXMsIGNhY2hlIG1hbmFnZXIuCiAgICAgICBEZXNjcmlwdGlvbjogIlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4KICAgICAgIFZlbnVzIGFuZCBrZXJuZWwgbGV2ZWwgZmlsZSBzeXN0ZW0gY29kZSBuZWVkZWQgZm9yIHRoZSBvcGVyYXRpb24KICAgICAgIG9mIHRoZSBDb2RhIGZpbGVzeXN0ZW0uIFRoaXMgdmVyc2lvbiBkb2N1bWVudCBpcyBtZWFudCB0byBkZXNjcmliZQogICAgICAgdGhlIGN1cnJlbnQgaW50ZXJmYWNlICh2ZXJzaW9uIDEuMCkgYXMgd2VsbCBhcyBpbXByb3ZlbWVudHMgd2UKICAgICAgIGVudmlzYWdlIi4KICAgICAgIAogICAgICogVGl0bGU6ICJQcm9ncmFtbWluZyBQQ0ktRGV2aWNlcyB1bmRlciBMaW51eCIKICAgICAgIEF1dGhvcjogQ2xhdXMgU2Nocm9ldGVyLgogICAgICAgVVJMOgogICAgICAgZnRwOi8vZnRwLmxscC5mdS1iZXJsaW4uZGUvcHViL2xpbnV4L0xJTlVYLUxBQi93aGl0ZXBhcGVycy9wY2lwLnBzCiAgICAgICAuZ3oKICAgICAgIEtleXdvcmRzOiBQQ0ksIGRldmljZSwgYnVzbWFzdGVyaW5nLgogICAgICAgRGVzY3JpcHRpb246IDYgcGFnZXMgdHV0b3JpYWwgb24gUENJIHByb2dyYW1taW5nIHVuZGVyIExpbnV4LgogICAgICAgR2l2ZXMgdGhlIGJhc2ljIGNvbmNlcHRzIG9uIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIFBDSSBzdWJzeXN0ZW0sCiAgICAgICBhcyBsb25nIGFzIGJhc2ljIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIHRvIHJlYWQvd3JpdGUgdGhlIGRldmljZXMKICAgICAgIGFuZCBwZXJmb3JtIGJ1c21hc3RlcmluZy4KICAgICAgIAogICAgICogVGl0bGU6ICJXcml0aW5nIENoYXJhY3RlciBEZXZpY2UgRHJpdmVyIGZvciBMaW51eCIKICAgICAgIEF1dGhvcjogUi4gQmFydWNoIGFuZCBDLiBTY2hyb2V0ZXIuCiAgICAgICBVUkw6CiAgICAgICBmdHA6Ly9mdHAubGxwLmZ1LWJlcmxpbi5kZS9wdWIvbGludXgvTElOVVgtTEFCL3doaXRlcGFwZXJzL2RyaXZlcnMKICAgICAgIC5wcy5negogICAgICAgS2V5d29yZHM6IGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycywgSS9PLCBzaWduYWxzLCBETUEsIGFjY2Vzc2luZwogICAgICAgcG9ydHMgaW4gdXNlciBzcGFjZSwga2VybmVsIGVudmlyb25tZW50LgogICAgICAgRGVzY3JpcHRpb246IDY4IHBhZ2VzIHBhcGVyIG9uIHdyaXRpbmcgY2hhcmFjdGVyIGRyaXZlcnMuIEEgbGl0dGxlCiAgICAgICBiaXQgb2xkICgxLjk5MywgMS45OTQpIGFsdGhvdWdoIHN0aWxsIHVzZWZ1bC4KICAgICAgIAogICAgICogVGl0bGU6ICJEZXNpZ24gYW5kIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWNvbmQgRXh0ZW5kZWQKICAgICAgIEZpbGVzeXN0ZW0iCiAgICAgICBBdXRob3I6IFLpbXkgQ2FyZCwgVGhlb2RvcmUgVHMnbywgU3RlcGhlbiBUd2VlZGllLgogICAgICAgVVJMOiBodHRwOi8vd2ViLm1pdC5lZHUvdHl0c28vd3d3L2xpbnV4L2V4dDJpbnRyby5odG1sCiAgICAgICBLZXl3b3JkczogZXh0MiwgbGludXggZnMgaGlzdG9yeSwgaW5vZGUsIGRpcmVjdG9yeSwgbGluaywgZGV2aWNlcywKICAgICAgIFZGUywgcGh5c2ljYWwgc3RydWN0dXJlLCBwZXJmb3JtYW5jZSwgYmVuY2htYXJrcywgZXh0MmZzIGxpYnJhcnksCiAgICAgICBleHQyZnMgdG9vbHMsIGUyZnNjay4KICAgICAgIERlc2NyaXB0aW9uOiBQYXBlciB3cml0dGVuIGJ5IHRocmVlIG9mIHRoZSB0b3AgZXh0MiBoYWNrZXJzLgogICAgICAgQ292ZXJzIExpbnV4IGZpbGVzeXN0ZW1zIGhpc3RvcnksIGV4dDIgbW90aXZhdGlvbiwgZXh0MiBmZWF0dXJlcywKICAgICAgIGRlc2lnbiwgcGh5c2ljYWwgc3RydWN0dXJlIG9uIGRpc2ssIHBlcmZvcm1hbmNlLCBiZW5jaG1hcmtzLAogICAgICAgZTJmc2NrJ3MgcGFzc2VzIGRlc2NyaXB0aW9uLi4uIEEgbXVzdCByZWFkIQogICAgICAgTm90ZXM6IFRoaXMgcGFwZXIgd2FzIGZpcnN0IHB1Ymxpc2hlZCBpbiB0aGUgUHJvY2VlZGluZ3Mgb2YgdGhlCiAgICAgICBGaXJzdCBEdXRjaCBJbnRlcm5hdGlvbmFsIFN5bXBvc2l1bSBvbiBMaW51eCwgSVNCTiA5MC0zNjctMDM4NS05LgogICAgICAgCiAgICAgKiBUaXRsZTogIkFuYWx5c2lzIG9mIHRoZSBFeHQyZnMgc3RydWN0dXJlIgogICAgICAgQXV0aG9yOiBMb3Vpcy1Eb21pbmlxdWUgRHViZWF1LgogICAgICAgVVJMOiBodHRwOi8vc3RlcC5wb2x5bXRsLmNhL35sZGQvZXh0MmZzL2V4dDJmc190b2MuaHRtbAogICAgICAgS2V5d29yZHM6IGV4dDIsIGZpbGVzeXN0ZW0sIGV4dDJmcy4KICAgICAgIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBvZiBleHQyJ3MgYmxvY2tzLCBkaXJlY3RvcmllcywgaW5vZGVzLAogICAgICAgYml0bWFwcywgaW52YXJpYW50cy4uLgogICAgICAgCiAgICAgKiBUaXRsZTogIkpvdXJuYWxpbmcgdGhlIExpbnV4IGV4dDJmcyBGaWxlc3lzdGVtIgogICAgICAgQXV0aG9yOiBTdGVwaGVuIEMuIFR3ZWVkaWUuCiAgICAgICBVUkw6CiAgICAgICBmdHA6Ly9mdHAudWsubGludXgub3JnL3B1Yi9saW51eC9zY3QvZnMvamZzL2pvdXJuYWwtZGVzaWduLnBzLmd6CiAgICAgICBLZXl3b3JkczogZXh0Mywgam91cm5hbGluZy4KICAgICAgIERlc2NyaXB0aW9uOiBFeGNlbGxlbnQgOC1wYWdlcyBwYXBlciBleHBsYWluaW5nIHRoZSBqb3VybmFsaW5nCiAgICAgICBjYXBhYmlsaXRpZXMgYWRkZWQgdG8gZXh0MiBieSB0aGUgYXV0aG9yLCBzaG93aW5nIGRpZmZlcmVudAogICAgICAgcHJvYmxlbXMgZmFjZWQgYW5kIHRoZSBhbHRlcm5hdGl2ZXMgY2hvc2VuLgogICAgICAgCiAgICAgKiBUaXRsZTogIktlcm5lbCBBUEkgY2hhbmdlcyBmcm9tIDIuMCB0byAyLjIiCiAgICAgICBBdXRob3I6IFJpY2hhcmQgR29vY2guCiAgICAgICBVUkw6CiAgICAgICBodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC9kb2NzL3BvcnRpbmctdG8tMi4yLmh0bWwKICAgICAgIEtleXdvcmRzOiAyLjIsIGNoYW5nZXMuCiAgICAgICBEZXNjcmlwdGlvbjogS2VybmVsIGZ1bmN0aW9ucy9zdHJ1Y3R1cmVzL3ZhcmlhYmxlcyB3aGljaCBjaGFuZ2VkCiAgICAgICBmcm9tIDIuMC54IHRvIDIuMi54LgogICAgICAgCiAgICAgKiBUaXRsZTogIktlcm5lbCBBUEkgY2hhbmdlcyBmcm9tIDIuMiB0byAyLjQiCiAgICAgICBBdXRob3I6IFJpY2hhcmQgR29vY2guCiAgICAgICBVUkw6CiAgICAgICBodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC9kb2NzL3BvcnRpbmctdG8tMi40Lmh0bWwKICAgICAgIEtleXdvcmRzOiAyLjQsIGNoYW5nZXMuCiAgICAgICBEZXNjcmlwdGlvbjogS2VybmVsIGZ1bmN0aW9ucy9zdHJ1Y3R1cmVzL3ZhcmlhYmxlcyB3aGljaCBjaGFuZ2VkCiAgICAgICBmcm9tIDIuMi54IHRvIDIuNC54LgogICAgICAgCiAgICAgKiBUaXRsZTogIkxpbnV4IEtlcm5lbCBNb2R1bGUgUHJvZ3JhbW1pbmcgR3VpZGUiCiAgICAgICBBdXRob3I6IE9yaSBQb21lcmFudHouCiAgICAgICBVUkw6IGh0dHA6Ly93d3cudGxkcC5vcmcvTERQL2xrbXBnL21wZy5odG1sCiAgICAgICBLZXl3b3JkczogbW9kdWxlcywgR1BMIGJvb2ssIC9wcm9jLCBpb2N0bHMsIHN5c3RlbSBjYWxscywKICAgICAgIGludGVycnVwdCBoYW5kbGVycyAuCiAgICAgICBEZXNjcmlwdGlvbjogVmVyeSBuaWNlIDkyIHBhZ2VzIEdQTCBib29rIG9uIHRoZSB0b3BpYyBvZiBtb2R1bGVzCiAgICAgICBwcm9ncmFtbWluZy4gTG90cyBvZiBleGFtcGxlcy4KICAgICAgIAogICAgICogVGl0bGU6ICJEZXZpY2UgRmlsZSBTeXN0ZW0gKGRldmZzKSBPdmVydmlldyIKICAgICAgIEF1dGhvcjogUmljaGFyZCBHb29jaC4KICAgICAgIFVSTDogaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvZG9jcy9kZXZmcy50eHQKICAgICAgIEtleXdvcmRzOiBmaWxlc3lzdGVtLCAvZGV2LCBkZXZmcywgZHluYW1pYyBkZXZpY2VzLCBtYWpvci9taW5vcgogICAgICAgYWxsb2NhdGlvbiwgZGV2aWNlIG1hbmFnZW1lbnQuCiAgICAgICBEZXNjcmlwdGlvbjogRG9jdW1lbnQgZGVzY3JpYmluZyBSaWNoYXJkIEdvb2NoJ3MgY29udHJvdmVyc2lhbAogICAgICAgZGV2ZnMsIHdoaWNoIGFsbG93cyBmb3IgZHluYW1pYyBkZXZpY2VzLCBvbmx5IHNob3dzIHByZXNlbnQKICAgICAgIGRldmljZXMgaW4gL2RldiwgZ2V0cyByaWQgb2YgbWFqb3IvbWlub3IgbnVtYmVycyBhbGxvY2F0aW9uCiAgICAgICBwcm9ibGVtcywgYW5kIGFsbG93cyBmb3IgaHVuZHJlZHMgb2YgaWRlbnRpY2FsIGRldmljZXMgKHdoaWNoIHNvbWUKICAgICAgIFVTQiBzeXN0ZW1zIG1pZ2h0IGRlbWFuZCBzb29uKS4KICAgICAgIAogICAgICogVGl0bGU6ICJJL08gRXZlbnQgSGFuZGxpbmcgVW5kZXIgTGludXgiCiAgICAgICBBdXRob3I6IFJpY2hhcmQgR29vY2guCiAgICAgICBVUkw6IGh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L2RvY3MvaW8tZXZlbnRzLmh0bWwKICAgICAgIEtleXdvcmRzOiBJTywgSS9PLCBzZWxlY3QoMiksIHBvbGwoMiksIEZEcywgYWlvX3JlYWQoMiksIHJlYWRpbmVzcwogICAgICAgZXZlbnQgcXVldWVzLgogICAgICAgRGVzY3JpcHRpb246IEZyb20gdGhlIEludHJvZHVjdGlvbjogIkkvTyBFdmVudCBoYW5kbGluZyBpcyBhYm91dAogICAgICAgaG93IHlvdXIgT3BlcmF0aW5nIFN5c3RlbSBhbGxvd3MgeW91IHRvIG1hbmFnZSBhIGxhcmdlIG51bWJlciBvZgogICAgICAgb3BlbiBmaWxlcyAoZmlsZSBkZXNjcmlwdG9ycyBpbiBVTklYL1BPU0lYLCBvciBGRHMpIGluIHlvdXIKICAgICAgIGFwcGxpY2F0aW9uLiBZb3Ugd2FudCB0aGUgT1MgdG8gbm90aWZ5IHlvdSB3aGVuIEZEcyBiZWNvbWUgYWN0aXZlCiAgICAgICAoaGF2ZSBkYXRhIHJlYWR5IHRvIGJlIHJlYWQgb3IgYXJlIHJlYWR5IGZvciB3cml0aW5nKS4gSWRlYWxseSB5b3UKICAgICAgIHdhbnQgYSBtZWNoYW5pc20gdGhhdCBpcyBzY2FsYWJsZS4gVGhpcyBtZWFucyBhIGxhcmdlIG51bWJlciBvZgogICAgICAgaW5hY3RpdmUgRkRzIGNvc3QgdmVyeSBsaXR0bGUgaW4gbWVtb3J5IGFuZCBDUFUgdGltZSB0byBtYW5hZ2UiLgogICAgICAgCiAgICAgKiBUaXRsZTogIlRoZSBLZXJuZWwgSGFja2luZyBIT1dUTyIKICAgICAgIEF1dGhvcjogVmFyaW91cyBUYWxlbnRlZCBQZW9wbGUsIGFuZCBSdXN0eS4KICAgICAgIFVSTDoKICAgICAgIGh0dHA6Ly93d3cubGlzb2xlZy5uZXQvZG9jL0tlcm5lbC1IYWNraW5nLUhPV1RPL2tlcm5lbC1oYWNraW5nLUhPVwogICAgICAgVE8uaHRtbAogICAgICAgS2V5d29yZHM6IEhPV1RPLCBrZXJuZWwgY29udGV4dHMsIGRlYWRsb2NrLCBsb2NraW5nLCBtb2R1bGVzLAogICAgICAgc3ltYm9scywgcmV0dXJuIGNvbnZlbnRpb25zLgogICAgICAgRGVzY3JpcHRpb246IEZyb20gdGhlIEludHJvZHVjdGlvbjogIlBsZWFzZSB1bmRlcnN0YW5kIHRoYXQgSQogICAgICAgbmV2ZXIgd2FudGVkIHRvIHdyaXRlIHRoaXMgZG9jdW1lbnQsIGJlaW5nIGdyb3NzbHkgdW5kZXJxdWFsaWZpZWQsCiAgICAgICBidXQgSSBhbHdheXMgd2FudGVkIHRvIHJlYWQgaXQsIGFuZCB0aGlzIHdhcyB0aGUgb25seSB3YXkuIEkKICAgICAgIHNpbXBseSBleHBsYWluIHNvbWUgYmVzdCBwcmFjdGljZXMsIGFuZCBnaXZlIHJlYWRpbmcgZW50cnktcG9pbnRzCiAgICAgICBpbnRvIHRoZSBrZXJuZWwgc291cmNlcy4gSSBhdm9pZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzOiB0aGF0J3MKICAgICAgIHdoYXQgdGhlIGNvZGUgaXMgZm9yLCBhbmQgSSBpZ25vcmUgd2hvbGUgdHJhY3RzIG9mIHVzZWZ1bAogICAgICAgcm91dGluZXMuIFRoaXMgZG9jdW1lbnQgYXNzdW1lcyBmYW1pbGlhcml0eSB3aXRoIEMsIGFuZCBhbgogICAgICAgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBrZXJuZWwgaXMsIGFuZCBob3cgaXQgaXMgdXNlZC4gSXQgd2FzCiAgICAgICBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSAyLjMga2VybmVscywgYnV0IG5lYXJseSBhbGwgb2YgaXQKICAgICAgIGFwcGxpZXMgdG8gMi4yIHRvbzsgMi4wIGlzIHNsaWdodGx5IGRpZmZlcmVudCIuCiAgICAgICAKICAgICAqIFRpdGxlOiAiQUxTQSAwLjUuMCBEZXZlbG9wZXIgZG9jdW1lbnRhdGlvbiIKICAgICAgIEF1dGhvcjogU3RlcGhhbiAnSnVtcHknIEJhcnRlbHMgLgogICAgICAgVVJMOiBodHRwOi8vd3d3Lm1hdGguVFUtQmVybGluLmRlL35zYmFydGVscy9hbHNhLwogICAgICAgS2V5d29yZHM6IEFMU0EsIHNvdW5kLCBzb3VuZGNhcmQsIGRyaXZlciwgbG93bGV2ZWwsIGhhcmR3YXJlLgogICAgICAgRGVzY3JpcHRpb246IEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZSBmb3IgZGV2ZWxvcGVycywKICAgICAgIGJvdGggYXQga2VybmVsIGFuZCB1c2VyLWxldmVsIHNpZGVzLiBXb3JrIGluIHByb2dyZXNzLiBBTFNBIGlzCiAgICAgICBzdXBwb3NlZCB0byBiZSBMaW51eCdzIG5leHQgZ2VuZXJhdGlvbiBzb3VuZCBhcmNoaXRlY3R1cmUuCiAgICAgICAKICAgICAqIFRpdGxlOiAiUHJvZ3JhbW1pbmcgR3VpZGUgZm9yIExpbnV4IFVTQiBEZXZpY2UgRHJpdmVycyIKICAgICAgIEF1dGhvcjogRGV0bGVmIEZsaWVnbC4KICAgICAgIFVSTDogaHR0cDovL3VzYi5pbi50dW0uZGUvdXNiZG9jLwogICAgICAgS2V5d29yZHM6IFVTQiwgdW5pdmVyc2FsIHNlcmlhbCBidXMuCiAgICAgICBEZXNjcmlwdGlvbjogQSBtdXN0LXJlYWQuIEZyb20gdGhlIFByZWZhY2U6ICJUaGlzIGRvY3VtZW50IHNob3VsZAogICAgICAgZ2l2ZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgVVNCCiAgICAgICBzdWJzeXN0ZW0gYW5kIGl0cyBBUEkgZm9yIFVTQiBkZXZpY2UgZHJpdmVycy4gVGhlIGZpcnN0IHNlY3Rpb24KICAgICAgIHdpbGwgZGVhbCB3aXRoIHRoZSBiYXNpY3Mgb2YgVVNCIGRldmljZXMuIFlvdSB3aWxsIGxlYXJuIGFib3V0CiAgICAgICBkaWZmZXJlbnQgdHlwZXMgb2YgZGV2aWNlcyBhbmQgdGhlaXIgcHJvcGVydGllcy4gR29pbmcgaW50byBkZXRhaWwKICAgICAgIHlvdSB3aWxsIHNlZSBob3cgVVNCIGRldmljZXMgY29tbXVuaWNhdGUgb24gdGhlIGJ1cy4gVGhlIHNlY29uZAogICAgICAgc2VjdGlvbiBnaXZlcyBhbiBvdmVydmlldyBvZiB0aGUgTGludXggVVNCIHN1YnN5c3RlbSBbMl0gYW5kIHRoZQogICAgICAgZGV2aWNlIGRyaXZlciBmcmFtZXdvcmsuIFRoZW4gdGhlIEFQSSBhbmQgaXRzIGRhdGEgc3RydWN0dXJlcyB3aWxsCiAgICAgICBiZSBleHBsYWluZWQgc3RlcCBieSBzdGVwLiBUaGUgbGFzdCBzZWN0aW9uIG9mIHRoaXMgZG9jdW1lbnQKICAgICAgIGNvbnRhaW5zIGEgcmVmZXJlbmNlIG9mIGFsbCBBUEkgY2FsbHMgYW5kIHRoZWlyIHJldHVybiBjb2RlcyIuCiAgICAgICBOb3RlczogQmV3YXJlOiB0aGUgbWFpbiBwYWdlIHN0YXRlczogIlRoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZQogICAgICAgcHVibGlzaGVkLCBwcmludGVkIG9yIHVzZWQgaW4gZXhjZXJwdHMgd2l0aG91dCBleHBsaWNpdCBwZXJtaXNzaW9uCiAgICAgICBvZiB0aGUgYXV0aG9yIi4gRm9ydHVuYXRlbHksIGl0IG1heSBzdGlsbCBiZSByZWFkLi4uCiAgICAgICAKICAgICAqIFRpdGxlOiAiVG91ciBPZiB0aGUgTGludXggS2VybmVsIFNvdXJjZSIKICAgICAgIEF1dGhvcjogVmlqbyBDaGVyaWFuLgogICAgICAgVVJMOiBodHRwOi8vd3d3Lmdlb2NpdGllcy5jb20vdmlqb2MvdG9sa3MvdG9sa3MuaHRtbAogICAgICAgS2V5d29yZHM6IC4KICAgICAgIERlc2NyaXB0aW9uOiBBIGNsYXNzaWMgb2YgdGhpcyBwYWdlISBXYXMgbG9zdCBmb3IgYSB3aGlsZSBhbmQgaXMKICAgICAgIGJhY2sgYWdhaW4uIFRoYW5rcyBWaWpvISBUT0xLUzogdGhlIG5hbWUgc2F5cyBpdCBhbGwuIEEgdG91ciBvZgogICAgICAgdGhlIHNvdXJjZXMsIGRlc2NyaWJpbmcgZGlyZWN0b3JpZXMsIGZpbGVzLCB2YXJpYWJsZXMsIGRhdGEKICAgICAgIHN0cnVjdHVyZXMuLi4gSXQgY292ZXJzIGdlbmVyYWwgc3R1ZmYsIGRldmljZSBkcml2ZXJzLAogICAgICAgZmlsZXN5c3RlbXMsIElQQyBhbmQgTmV0d29ya2luZyBDb2RlLgogICAgICAgCiAgICAgKiBUaXRsZTogIkxpbnV4IEtlcm5lbCBNYWlsaW5nIExpc3QgR2xvc3NhcnkiCiAgICAgICBBdXRob3I6IEpvaG4gTGV2b24uCiAgICAgICBVUkw6IGh0dHA6Ly93d3cubW92ZW1lbnQudWtsaW51eC5uZXQvZ2xvc3NhcnkuaHRtbAogICAgICAgS2V5d29yZHM6IGdsb3NzYXJ5LCB0ZXJtcywgbGludXgta2VybmVsLgogICAgICAgRGVzY3JpcHRpb246IEZyb20gdGhlIGludHJvZHVjdGlvbjogIlRoaXMgZ2xvc3NhcnkgaXMgaW50ZW5kZWQgYXMKICAgICAgIGEgYnJpZWYgZGVzY3JpcHRpb24gb2Ygc29tZSBvZiB0aGUgYWNyb255bXMgYW5kIHRlcm1zIHlvdSBtYXkgaGVhcgogICAgICAgZHVyaW5nIGRpc2N1c3Npb24gb2YgdGhlIExpbnV4IGtlcm5lbCIuCiAgICAgICAKICAgICAqIFRpdGxlOiAiTGludXggS2VybmVsIExvY2tpbmcgSE9XVE8iCiAgICAgICBBdXRob3I6IFZhcmlvdXMgVGFsZW50ZWQgUGVvcGxlLCBhbmQgUnVzdHkuCiAgICAgICBVUkw6CiAgICAgICBodHRwOi8vbmV0ZmlsdGVyLmtlcm5lbG5vdGVzLm9yZy91bnJlbGlhYmxlLWd1aWRlcy9rZXJuZWwtbG9ja2luZy0KICAgICAgIEhPV1RPLmh0bWwKICAgICAgIEtleXdvcmRzOiBsb2NrcywgbG9ja2luZywgc3BpbmxvY2ssIHNlbWFwaG9yZSwgYXRvbWljLCByYWNlCiAgICAgICBjb25kaXRpb24sIGJvdHRvbSBoYWx2ZXMsIHRhc2tsZXRzLCBzb2Z0aXJxcy4KICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGw6IGRvY3VtZW50IGRlc2NyaWJpbmcgdGhlCiAgICAgICBsb2NraW5nIHN5c3RlbSBpbiB0aGUgTGludXggS2VybmVsIGVpdGhlciBpbiB1bmlwcm9jZXNzb3Igb3IgU01QCiAgICAgICBzeXN0ZW1zLgogICAgICAgTm90ZXM6ICJJdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciB0aGUgbGF0ZXIgKD4yLjMuNDcpIDIuMwogICAgICAga2VybmVscywgYnV0IG1vc3Qgb2YgaXQgYXBwbGllcyB0byAyLjIgdG9vOyAyLjAgaXMgc2xpZ2h0bHkKICAgICAgIGRpZmZlcmVudCIuIEZyZWVseSByZWRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQogICAgICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICAgICAgIAogICAgICogVGl0bGU6ICJQb3J0aW5nIExpbnV4IDIuMCBEcml2ZXJzIFRvIExpbnV4IDIuMjogQ2hhbmdlcyBhbmQgTmV3CiAgICAgICBGZWF0dXJlcyAiCiAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0wNS9nZWFyXzAxLmh0bWwKICAgICAgIEtleXdvcmRzOiBwb3J0cywgcG9ydGluZy4KICAgICAgIERlc2NyaXB0aW9uOiBBcnRpY2xlIGZyb20gTGludXggTWFnYXppbmUgb24gcG9ydGluZyBmcm9tIDIuMCB0bwogICAgICAgMi4yIGtlcm5lbHMuCiAgICAgICAKICAgICAqIFRpdGxlOiAiUG9ydGluZyBEZXZpY2UgRHJpdmVycyBUbyBMaW51eCAyLjI6IHBhcnQgSUkiCiAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0wNi9nZWFyXzAxLmh0bWwKICAgICAgIEtleXdvcmRzOiBwb3J0cywgcG9ydGluZy4KICAgICAgIERlc2NyaXB0aW9uOiBTZWNvbmQgcGFydCBvbiBwb3J0aW5nIGZyb20gMi4wIHRvIDIuMiBrZXJuZWxzLgogICAgICAgCiAgICAgKiBUaXRsZTogIkhvdyBUbyBNYWtlIFN1cmUgWW91ciBEcml2ZXIgV2lsbCBXb3JrIE9uIFRoZSBQb3dlcgogICAgICAgTWFjaW50b3NoIgogICAgICAgQXV0aG9yOiBQYXVsIE1hY2tlcnJhcy4KICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMDcvZ2Vhcl8wMS5odG1sCiAgICAgICBLZXl3b3JkczogTWFjLCBQb3dlciBNYWNpbnRvc2gsIHBvcnRpbmcsIGRyaXZlcnMsIGNvbXBhdGliaWxpdHkuCiAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgogICAgICAgCiAgICAgKiBUaXRsZTogIkFuIEludHJvZHVjdGlvbiB0byBTQ1NJIERyaXZlcnMiCiAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0wOC9nZWFyXzAxLmh0bWwKICAgICAgIEtleXdvcmRzOiBTQ1NJLCBkZXZpY2UsIGRyaXZlci4KICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCiAgICAgICAKICAgICAqIFRpdGxlOiAiQWR2YW5jZWQgU0NTSSBEcml2ZXJzIEFuZCBPdGhlciBUYWxlcyIKICAgICAgIEF1dGhvcjogQWxhbiBDb3guCiAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTA5L2dlYXJfMDEuaHRtbAogICAgICAgS2V5d29yZHM6IFNDU0ksIGRldmljZSwgZHJpdmVyLCBhZHZhbmNlZC4KICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCiAgICAgICAKICAgICAqIFRpdGxlOiAiV3JpdGluZyBMaW51eCBNb3VzZSBEcml2ZXJzIgogICAgICAgQXV0aG9yOiBBbGFuIENveC4KICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMTAvZ2Vhcl8wMS5odG1sCiAgICAgICBLZXl3b3JkczogbW91c2UsIGRyaXZlciwgZ3BtLgogICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KICAgICAgIAogICAgICogVGl0bGU6ICJNb3JlIG9uIE1vdXNlIERyaXZlcnMiCiAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0xMS9nZWFyXzAxLmh0bWwKICAgICAgIEtleXdvcmRzOiBtb3VzZSwgZHJpdmVyLCBncG0sIHJhY2VzLCBhc3luY2hyb25vdXMgSS9PLgogICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzdGlsbCBzYXlzIGl0IGFsbC4KICAgICAgIAogICAgICogVGl0bGU6ICJXcml0aW5nIFZpZGVvNGxpbnV4IFJhZGlvIERyaXZlciIKICAgICAgIEF1dGhvcjogQWxhbiBDb3guCiAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTEyL2dlYXJfMDEuaHRtbAogICAgICAgS2V5d29yZHM6IHZpZGVvNGxpbnV4LCBkcml2ZXIsIHJhZGlvLCByYWRpbyBkZXZpY2VzLgogICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KICAgICAgIAogICAgICogVGl0bGU6ICJWaWRlbzRsaW51eCBEcml2ZXJzLCBQYXJ0IDE6IFZpZGVvLUNhcHR1cmUgRGV2aWNlIgogICAgICAgQXV0aG9yOiBBbGFuIENveC4KICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzIwMDAtMDEvZ2Vhcl8wMS5odG1sCiAgICAgICBLZXl3b3JkczogdmlkZW80bGludXgsIGRyaXZlciwgdmlkZW8gY2FwdHVyZSwgY2FwdHVyZSBkZXZpY2VzLAogICAgICAgY2FtZXJhIGRyaXZlci4KICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCiAgICAgICAKICAgICAqIFRpdGxlOiAiVmlkZW80bGludXggRHJpdmVycywgUGFydCAyOiBWaWRlby1jYXB0dXJlIERldmljZXMiCiAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMjAwMC0wMi9nZWFyXzAxLmh0bWwKICAgICAgIEtleXdvcmRzOiB2aWRlbzRsaW51eCwgZHJpdmVyLCB2aWRlbyBjYXB0dXJlLCBjYXB0dXJlIGRldmljZXMsCiAgICAgICBjYW1lcmEgZHJpdmVyLCBjb250cm9sLCBxdWVyeSBjYXBhYmlsaXRpZXMsIGNhcGFiaWxpdHksIGZhY2lsaXR5LgogICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KICAgICAgIAogICAgICogVGl0bGU6ICJQQ0kgTWFuYWdlbWVudCBpbiBMaW51eCAyLjIiCiAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMjAwMC0wMy9nZWFyXzAxLmh0bWwKICAgICAgIEtleXdvcmRzOiBQQ0ksIGJ1cywgYnVzLW1hc3RlcmluZy4KICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCiAgICAgICAKICAgICAqIFRpdGxlOiAiTGludXggMi40IEtlcm5lbCBJbnRlcm5hbHMiCiAgICAgICBBdXRob3I6IFRpZ3JhbiBBaXZhemlhbiBhbmQgQ2hyaXN0b3BoIEhlbGx3aWcuCiAgICAgICBVUkw6IGh0dHA6Ly93d3cubW9zZXMudWtsaW51eC5uZXQvcGF0Y2hlcy9sa2kuaHRtbAogICAgICAgS2V5d29yZHM6IExpbnV4LCBrZXJuZWwsIGJvb3RpbmcsIFNNQiBib290LCBWRlMsIHBhZ2UgY2FjaGUuCiAgICAgICBEZXNjcmlwdGlvbjogQSBsaXR0bGUgYm9vayB1c2VkIGZvciBhIHNob3J0IHRyYWluaW5nIGNvdXJzZS4KICAgICAgIENvdmVycyBidWlsZGluZyB0aGUga2VybmVsIGltYWdlLCBib290aW5nIChpbmNsdWRpbmcgU01QIGJvb3R1cCksCiAgICAgICBwcm9jZXNzIG1hbmFnZW1lbnQsIFZGUyBhbmQgbW9yZS4KICAgICAgIAogICAgICogVGl0bGU6ICJMaW51eCBJUCBOZXR3b3JraW5nLiBBIEd1aWRlIHRvIHRoZSBJbXBsZW1lbnRhdGlvbiBhbmQKICAgICAgIE1vZGlmaWNhdGlvbiBvZiB0aGUgTGludXggUHJvdG9jb2wgU3RhY2suIgogICAgICAgQXV0aG9yOiBHbGVubiBIZXJyaW4uCiAgICAgICBVUkw6CiAgICAgICBodHRwOi8va2VybmVsbmV3Ymllcy5vcmcvZG9jdW1lbnRzL2lwbmV0d29ya2luZy9saW51eGlwbmV0d29ya2luZy4KICAgICAgIGh0bWwKICAgICAgIEtleXdvcmRzOiBuZXR3b3JrLCBuZXR3b3JraW5nLCBwcm90b2NvbCwgSVAsIFVEUCwgVENQLCBjb25uZWN0aW9uLAogICAgICAgc29ja2V0LCByZWNlaXZpbmcsIHRyYW5zbWl0dGluZywgZm9yd2FyZGluZywgcm91dGluZywgcGFja2V0cywKICAgICAgIG1vZHVsZXMsIC9wcm9jLCBza19idWZmLCBGSUIsIHRhZ3MuCiAgICAgICBEZXNjcmlwdGlvbjogRXhjZWxsZW50IHBhcGVyIGRldm90ZWQgdG8gdGhlIExpbnV4IElQIE5ldHdvcmtpbmcsCiAgICAgICBleHBsYWluaW5nIGFueXRoaW5nIGZyb20gdGhlIGtlcm5lbCdzIHRvIHRoZSB1c2VyIHNwYWNlCiAgICAgICBjb25maWd1cmF0aW9uIHRvb2xzJyBjb2RlLiBWZXJ5IGdvb2QgdG8gZ2V0IGEgZ2VuZXJhbCBvdmVydmlldyBvZgogICAgICAgdGhlIGtlcm5lbCBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uIGFuZCB1bmRlcnN0YW5kIGFsbCBzdGVwcwogICAgICAgcGFja2V0cyBmb2xsb3cgZnJvbSB0aGUgdGltZSB0aGV5IGFyZSByZWNlaXZlZCBhdCB0aGUgbmV0d29yawogICAgICAgZGV2aWNlIHRpbGwgdGhleSBhcmUgZGVsaXZlcmVkIHRvIGFwcGxpY2F0aW9ucy4gVGhlIHN0dWRpZWQga2VybmVsCiAgICAgICBjb2RlIGlzIGZyb20gMi4yLjE0IHZlcnNpb24uIFByb3ZpZGVzIGNvZGUgZm9yIGEgd29ya2luZyBwYWNrZXQKICAgICAgIGRyb3BwZXIgZXhhbXBsZS4KICAgICAgIAogICAgICogVGl0bGU6ICJHZXQgdGhvc2UgYm9hcmRzIHRhbGtpbmcgdW5kZXIgTGludXguIgogICAgICAgQXV0aG9yOiBBbGV4IEl2Y2hlbmtvLgogICAgICAgVVJMOiBodHRwOi8vd3d3LmVkbm1hZy5jb20vZWRubWFnL3JlZy8yMDAwLzA2MjIyMDAwLzEzZGYyLmh0bQogICAgICAgS2V5d29yZHM6IGRhdGEtYWNxdWlzaXRpb24gYm9hcmRzLCBkcml2ZXJzLCBtb2R1bGVzLCBpbnRlcnJ1cHRzLAogICAgICAgbWVtb3J5IGFsbG9jYXRpb24uCiAgICAgICBEZXNjcmlwdGlvbjogQXJ0aWNsZSB3cml0dGVuIGZvciBwZW9wbGUgd2lzaGluZyB0byBtYWtlIHRoZWlyIGRhdGEKICAgICAgIGFjcXVpc2l0aW9uIGJvYXJkcyB3b3JrIG9uIHRoZWlyIEdOVS9MaW51eCBtYWNoaW5lcy4gR2l2ZXMgYSBiYXNpYwogICAgICAgb3ZlcnZpZXcgb24gd3JpdGluZyBkcml2ZXJzLCBmcm9tIHRoZSBuYW1pbmcgb2YgZnVuY3Rpb25zIHRvCiAgICAgICBpbnRlcnJ1cHQgaGFuZGxpbmcuCiAgICAgICBOb3RlczogVHdvLXBhcnRzIGFydGljbGUuIFBhcnQgSUkgaXMgYXQKICAgICAgIGh0dHA6Ly93d3cuZWRubWFnLmNvbS9lZG5tYWcvcmVnLzIwMDAvMDcwNjIwMDAvMTRkZi5odG0KICAgICAgIAogICAgICogVGl0bGU6ICJMaW51eCBQQ01DSUEgUHJvZ3JhbW1lcidzIEd1aWRlIgogICAgICAgQXV0aG9yOiBEYXZpZCBIaW5kcy4KICAgICAgIFVSTDogaHR0cDovL3BjbWNpYS1jcy5zb3VyY2Vmb3JnZS5uZXQvZnRwL2RvYy9QQ01DSUEtUFJPRy5odG1sCiAgICAgICBLZXl3b3JkczogUENNQ0lBLgogICAgICAgRGVzY3JpcHRpb246ICJUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gd3JpdGUga2VybmVsIGRldmljZQogICAgICAgZHJpdmVycyBmb3IgdGhlIExpbnV4IFBDTUNJQSBDYXJkIFNlcnZpY2VzIGludGVyZmFjZS4gSXQgYWxzbwogICAgICAgZGVzY3JpYmVzIGhvdyB0byB3cml0ZSB1c2VyLW1vZGUgdXRpbGl0aWVzIGZvciBjb21tdW5pY2F0aW5nIHdpdGgKICAgICAgIENhcmQgU2VydmljZXMuCiAgICAgICAKICAgICAqIFRpdGxlOiAiVGhlIExpbnV4IEtlcm5lbCBORlNEIEltcGxlbWVudGF0aW9uIgogICAgICAgQXV0aG9yOiBOZWlsIEJyb3duLgogICAgICAgVVJMOgogICAgICAgaHR0cDovL3d3dy5jc2UudW5zdy5lZHUuYXUvfm5laWxiL29zcy9saW51eC1jb21tZW50YXJ5L25mc2QuaHRtbAogICAgICAgS2V5d29yZHM6IGtuZnNkLCBuZnNkLCBORlMsIFJQQywgbG9ja2QsIG1vdW50ZCwgc3RhdGQuCiAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgogICAgICAgTm90ZXM6IENvdmVycyBrbmZzZCdzIHZlcnNpb24gMS40LjcgKHBhdGNoIGFnYWluc3QgMi4yLjcga2VybmVsKS4KICAgICAgIAogICAgICogVGl0bGU6ICJBIExpbnV4IHZtIFJFQURNRSIKICAgICAgIEF1dGhvcjogS2Fub2ogU2FyY2FyLgogICAgICAgVVJMOiBodHRwOi8vcmVhbGl0eS5zZ2kuY29tL2thbm9qX2VuZ3Ivdm0yMjkuaHRtbAogICAgICAgS2V5d29yZHM6IHZpcnR1YWwgbWVtb3J5LCBtbSwgcGdkLCB2bWEsIHBhZ2UsIHBhZ2UgZmxhZ3MsIHBhZ2UKICAgICAgIGNhY2hlLCBzd2FwIGNhY2hlLCBrc3dhcGQuCiAgICAgICBEZXNjcmlwdGlvbjogVGVsZWdyYXBoaWMsIHNob3J0IGRlc2NyaXB0aW9ucyBhbmQgZGVmaW5pdGlvbnMKICAgICAgIHJlbGF0aW5nIHRoZSBMaW51eCB2aXJ0dWFsIG1lbW9yeSBpbXBsZW1lbnRhdGlvbi4KICAgICAgIAogICAgICogVGl0bGU6ICIobmVhcmx5KSBDb21wbGV0ZSBMaW51eCBMb2FkYWJsZSBLZXJuZWwgTW9kdWxlcy4gVGhlCiAgICAgICBkZWZpbml0aXZlIGd1aWRlIGZvciBoYWNrZXJzLCB2aXJ1cyBjb2RlcnMgYW5kIHN5c3RlbQogICAgICAgYWRtaW5pc3RyYXRvcnMuIgogICAgICAgQXV0aG9yOiBwcmFnbWF0aWMvVEhDLgogICAgICAgVVJMOiBodHRwOi8vcGFja2V0c3Rvcm0uc2VjdXJpZnkuY29tL2dyb3Vwcy90aGMvTEtNX0hBQ0tJTkcuaHRtbAogICAgICAgS2V5d29yZHM6IHN5c2NhbGxzLCBpbnRlcmNlcHQsIGhpZGUsIGFidXNlLCBzeW1ib2wgdGFibGUuCiAgICAgICBEZXNjcmlwdGlvbjogSW50ZXJlc3RpbmcgcGFwZXIgb24gaG93IHRvIGFidXNlIHRoZSBMaW51eCBrZXJuZWwgaW4KICAgICAgIG9yZGVyIHRvIGludGVyY2VwdCBhbmQgbW9kaWZ5IHN5c2NhbGxzLCBtYWtlCiAgICAgICBmaWxlcy9kaXJlY3Rvcmllcy9wcm9jZXNzZXMgaW52aXNpYmxlLCBiZWNvbWUgcm9vdCwgaGlqYWNrIHR0eXMsCiAgICAgICB3cml0ZSBrZXJuZWwgbW9kdWxlcyBiYXNlZCB2aXJ1cy4uLiBhbmQgc29sdXRpb25zIGZvciBhZG1pbnMgdG8KICAgICAgIGF2b2lkIGFsbCB0aG9zZSBhYnVzZXMuCiAgICAgICBOb3RlczogRm9yIDIuMC54IGtlcm5lbHMuIEdpdmVzIGd1aWRhbmNlcyB0byBwb3J0IGl0IHRvIDIuMi54CiAgICAgICBrZXJuZWxzLiBBbHNvIGF2YWlsYWJsZSBpbiB0eHQgZm9ybWF0IGF0CiAgICAgICBodHRwOi8vd3d3LmJsYWNrbmVtZXNpcy5vcmcvaGFja2luZy90eHQvY2xsa20udHh0CiAgICAgICAKICAgICBCT09LUzogKE5vdCBvbi1saW5lKQogICAKICAgICAqIFRpdGxlOiAiTGludXggRGV2aWNlIERyaXZlcnMiCiAgICAgICBBdXRob3I6IEFsZXNzYW5kcm8gUnViaW5pLgogICAgICAgUHVibGlzaGVyOiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMuCiAgICAgICBEYXRlOiAxOTk4LgogICAgICAgUGFnZXM6IDQzOS4KICAgICAgIElTQk46IDEtNTY1OTItMjkyLTEKICAgICAgIAogICAgICogVGl0bGU6ICJMaW51eCBEZXZpY2UgRHJpdmVycywgMm5kIEVkaXRpb24iCiAgICAgICBBdXRob3I6IEFsZXNzYW5kcm8gUnViaW5pIGFuZCBKb25hdGhhbiBDb3JiZXQuCiAgICAgICBQdWJsaXNoZXI6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcy4KICAgICAgIERhdGU6IDIwMDEuCiAgICAgICBQYWdlczogNTg2LgogICAgICAgSVNCTjogMC01OTYwMC0wMDgtMQogICAgICAgTm90ZXM6IEZ1cnRoZXIgaW5mb3JtYXRpb24gaW4KICAgICAgIGh0dHA6Ly93d3cub3JlaWxseS5jb20vY2F0YWxvZy9saW51eGRyaXZlMi8KICAgICAgIAogICAgICogVGl0bGU6ICJMaW51eCBLZXJuZWwgSW50ZXJuYWxzIgogICAgICAgQXV0aG9yOiBNaWNoYWVsIEJlY2suCiAgICAgICBQdWJsaXNoZXI6IEFkZGlzb24tV2VzbGV5LgogICAgICAgRGF0ZTogMTk5Ny4KICAgICAgIElTQk46IDAtMjAxLTMzMTQzLTggKHNlY29uZCBlZGl0aW9uKQogICAgICAgCiAgICAgKiBUaXRsZTogIlRoZSBEZXNpZ24gb2YgdGhlIFVOSVggT3BlcmF0aW5nIFN5c3RlbSIKICAgICAgIEF1dGhvcjogTWF1cmljZSBKLiBCYWNoLgogICAgICAgUHVibGlzaGVyOiBQcmVudGljZSBIYWxsLgogICAgICAgRGF0ZTogMTk4Ni4KICAgICAgIFBhZ2VzOiA0NzEuCiAgICAgICBJU0JOOiAwLTEzLTIwMTc1Ny0xCiAgICAgICAKICAgICAqIFRpdGxlOiAiVGhlIERlc2lnbiBhbmQgSW1wbGVtZW50YXRpb24gb2YgdGhlIDQuMyBCU0QgVU5JWAogICAgICAgT3BlcmF0aW5nIFN5c3RlbSIKICAgICAgIEF1dGhvcjogU2FtdWVsIEouIExlZmZsZXIsIE1hcnNoYWxsIEtpcmsgTWNLdXNpY2ssIE1pY2hhZWwgSi4KICAgICAgIEthcmVscywgSm9obiBTLiBRdWFydGVybWFuLgogICAgICAgUHVibGlzaGVyOiBBZGRpc29uLVdlc2xleS4KICAgICAgIERhdGU6IDE5ODkgKHJlcHJpbnRlZCB3aXRoIGNvcnJlY3Rpb25zIG9uIE9jdG9iZXIsIDE5OTApLgogICAgICAgSVNCTjogMC0yMDEtMDYxOTYtMQogICAgICAgCiAgICAgKiBUaXRsZTogIlRoZSBEZXNpZ24gYW5kIEltcGxlbWVudGF0aW9uIG9mIHRoZSA0LjQgQlNEIFVOSVgKICAgICAgIE9wZXJhdGluZyBTeXN0ZW0iCiAgICAgICBBdXRob3I6IE1hcnNoYWxsIEtpcmsgTWNLdXNpY2ssIEtlaXRoIEJvc3RpYywgTWljaGFlbCBKLiBLYXJlbHMsCiAgICAgICBKb2huIFMuIFF1YXJ0ZXJtYW4uCiAgICAgICBQdWJsaXNoZXI6IEFkZGlzb24tV2VzbGV5LgogICAgICAgRGF0ZTogMTk5Ni4KICAgICAgIElTQk46IDAtMjAxLTU0OTc5LTQKICAgICAgIAogICAgICogVGl0bGU6ICJQcm9ncmFtbWF0aW9uIExpbnV4IDIuMCBBUEkgc3lzdGVtZSBldCBmb25jdGlvbm5lbWVudCBkdQogICAgICAgbm95YXUiCiAgICAgICBBdXRob3I6IFJlbXkgQ2FyZCwgRXJpYyBEdW1hcywgRnJhbmNrIE1ldmVsLgogICAgICAgUHVibGlzaGVyOiBFeXJvbGxlcy4KICAgICAgIERhdGU6IDE5OTcuCiAgICAgICBQYWdlczogNTIwLgogICAgICAgSVNCTjogMi0yMTItMDg5MzItNQogICAgICAgTm90ZXM6IEZyZW5jaC4KICAgICAgIAogICAgICogVGl0bGU6ICJUaGUgTGludXggS2VybmVsIEJvb2siCiAgICAgICBBdXRob3I6IFJlbXkgQ2FyZCwgRXJpYyBEdW1hcywgRnJhbmNrIE1ldmVsLgogICAgICAgUHVibGlzaGVyOiBKb2huIFdpbGV5ICYgU29ucy4KICAgICAgIERhdGU6IDE5OTguCiAgICAgICBJU0JOOiAwLTQ3MS05ODE0MS05CiAgICAgICBOb3RlczogRW5nbGlzaCB0cmFuc2xhdGlvbi4KICAgICAgIAogICAgICogVGl0bGU6ICJMaW51eCAyLjAiCiAgICAgICBBdXRob3I6IFJlbXkgQ2FyZCwgRXJpYyBEdW1hcywgRnJhbmNrIE1ldmVsLgogICAgICAgUHVibGlzaGVyOiBHZXN0afNuIDIwMDAuCiAgICAgICBEYXRlOiAxOTk3LgogICAgICAgUGFnZXM6IDUwMS4KICAgICAgIElTQk46IDgtNDgwLTg4MjA4LTUKICAgICAgIE5vdGVzOiBTcGFuaXNoIHRyYW5zbGF0aW9uLgogICAgICAgCiAgICAgKiBUaXRsZTogIlVuaXggaW50ZXJuYWxzIC0tIHRoZSBuZXcgZnJvbnRpZXJzIgogICAgICAgQXV0aG9yOiBVcmVzaCBWYWhhbGlhLgogICAgICAgUHVibGlzaGVyOiBQcmVudGljZSBIYWxsLgogICAgICAgRGF0ZTogMTk5Ni4KICAgICAgIFBhZ2VzOiA2MDAuCiAgICAgICBJU0JOOiAwLTEzLTEwMTkwOC0yCiAgICAgICAKICAgICAqIFRpdGxlOiAiTGludXggQ29yZSBLZXJuZWwgQ29tbWVudGFyeS4gR3VpZGUgdG8gSW5zaWRlcidzIEtub3dsZWRnZQogICAgICAgb24gdGhlIENvcmUgS2VybmVsIG9mIHRoZSBMaW51eCBDb2RlIgogICAgICAgQXV0aG9yOiBTY290dCBNYXh3ZWxsLgogICAgICAgUHVibGlzaGVyOiBDb3Jpb2xpcy4KICAgICAgIERhdGU6IDE5OTkuCiAgICAgICBQYWdlczogNTkyLgogICAgICAgSVNCTjogMS01NzYxMC00NjktOQogICAgICAgTm90ZXM6IENELVJPTSBpbmNsdWRlZC4gTGluZSBieSBsaW5lIGNvbW1lbnRhcnkgb2YgdGhlIGtlcm5lbAogICAgICAgY29kZS4KICAgICAgIAogICAgICogVGl0bGU6ICJMaW51eCBJUCBTdGFja3MgQ29tbWVudGFyeSIKICAgICAgIEF1dGhvcjogU3RlcGhlbiBTYXRjaGVsbCBhbmQgSEJKIENsaWZmb3JkLgogICAgICAgUHVibGlzaGVyOiBDb3Jpb2xpcy4KICAgICAgIERhdGU6IDIwMDAuCiAgICAgICBQYWdlczogPz8/LgogICAgICAgSVNCTjogMS01NzYxMC00NzAtMgogICAgICAgTm90ZXM6IExpbmUgYnkgbGluZSBzb3VyY2UgY29kZSBjb21tZW50YXJ5IGJvb2suCiAgICAgICAKICAgICAqIFRpdGxlOiAiUHJvZ3JhbW1pbmcgZm9yIHRoZSByZWFsIHdvcmxkIC0gUE9TSVguNCIKICAgICAgIEF1dGhvcjogQmlsbCBPLiBHYWxsbWVpc3Rlci4KICAgICAgIFB1Ymxpc2hlcjogTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLgogICAgICAgRGF0ZTogMTk5NS4KICAgICAgIFBhZ2VzOiA/Pz8uCiAgICAgICBJU0JOOiBJLTU2NTkyLTA3NC0wCiAgICAgICBOb3RlczogVGhvdWdoIG5vdCBiZWluZyBkaXJlY3RseSBhYm91dCBMaW51eCwgTGludXggYWltcyB0byBiZQogICAgICAgUE9TSVguIEdvb2QgcmVmZXJlbmNlLgogICAgICAgCiAgICAgKiBUaXRsZTogIlVuZGVyc3RhbmRpbmcgdGhlIExpbnV4IEtlcm5lbCIKICAgICAgIEF1dGhvcjogRGFuaWVsIFAuIEJvdmV0IGFuZCBNYXJjbyBDZXNhdGkuCiAgICAgICBQdWJsaXNoZXI6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcywgSW5jLi4KICAgICAgIERhdGU6IDIwMDAuCiAgICAgICBQYWdlczogNzAyLgogICAgICAgSVNCTjogMC01OTYtMDAwMDItMgogICAgICAgTm90ZXM6IEZ1cnRoZXIgaW5mb3JtYXRpb24gaW4KICAgICAgIGh0dHA6Ly93d3cub3JlaWxseS5jb20vY2F0YWxvZy9saW51eGtlcm5lbC8KICAgICAgIAogICAgIE1JU0NFTExBTkVPVVM6CiAgIAogICAgICogTmFtZTogbGludXgvRG9jdW1lbnRhdGlvbgogICAgICAgQXV0aG9yOiBNYW55LgogICAgICAgVVJMOiBKdXN0IGxvb2sgaW5zaWRlIHlvdXIga2VybmVsIHNvdXJjZXMuCiAgICAgICBLZXl3b3JkczogYW55dGhpbmcsIERvY0Jvb2suCiAgICAgICBEZXNjcmlwdGlvbjogRG9jdW1lbnRhdGlvbiB0aGF0IGNvbWVzIHdpdGggdGhlIGtlcm5lbCBzb3VyY2VzLAogICAgICAgaW5zaWRlIHRoZSBEb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4gU29tZSBwYWdlcyBmcm9tIHRoaXMgZG9jdW1lbnQKICAgICAgIChpbmNsdWRpbmcgdGhpcyBkb2N1bWVudCBpdHNlbGYpIGhhdmUgYmVlbiBtb3ZlZCB0aGVyZSwgYW5kIG1pZ2h0CiAgICAgICBiZSBtb3JlIHVwIHRvIGRhdGUgdGhhbiB0aGUgd2ViIHZlcnNpb24uCiAgICAgICAKICAgICAqIE5hbWU6ICJMaW51eCBTb3VyY2UgRHJpdmVyIgogICAgICAgVVJMOiBodHRwOi8vbHNkLmxpbnV4LmN6CiAgICAgICBLZXl3b3JkczogQnJvd3Npbmcgc291cmNlIGNvZGUuCiAgICAgICBEZXNjcmlwdGlvbjogIkxpbnV4IFNvdXJjZSBEcml2ZXIgKExTRCkgaXMgYW4gYXBwbGljYXRpb24sIHdoaWNoCiAgICAgICBjYW4gbWFrZSBicm93c2luZyBzb3VyY2UgY29kZXMgb2YgTGludXgga2VybmVsIGVhc2llciB0aGFuIHlvdSBjYW4KICAgICAgIGltYWdpbmUuIFlvdSBjYW4gc2VsZWN0IGJldHdlZW4gbXVsdGlwbGUgdmVyc2lvbnMgb2Yga2VybmVsIChlLmcuCiAgICAgICAwLjAxLCAxLjAuMCwgMi4wLjMzLCAyLjAuMzRwcmUxMywgMi4wLjAsIDIuMS4xMDEgZXRjLikuIFdpdGggTFNECiAgICAgICB5b3UgY2FuIHNlYXJjaCBMaW51eCBrZXJuZWwgKGZ1bGx0ZXh0LCBtYWNyb3MsIHR5cGVzLCBmdW5jdGlvbnMKICAgICAgIGFuZCB2YXJpYWJsZXMpIGFuZCBMU0QgY2FuIGdlbmVyYXRlIHBhdGNoZXMgZm9yIHlvdSBvbiB0aGUgZmx5CiAgICAgICAoZmlsZXMsIGRpcmVjdG9yaWVzIG9yIGtlcm5lbCkiLgogICAgICAgCiAgICAgKiBOYW1lOiAiTGludXggS2VybmVsIFNvdXJjZSBSZWZlcmVuY2UiCiAgICAgICBBdXRob3I6IFRob21hcyBHcmFpY2hlbi4KICAgICAgIFVSTDogaHR0cDovL2lubm9taW5hdGUub3JnL35ncmFpY2hlbi9wcm9qZWN0cy9sa3NyLwogICAgICAgS2V5d29yZHM6IENWUywgd2ViLCBjdnN3ZWIsIGJyb3dzaW5nIHNvdXJjZSBjb2RlLgogICAgICAgRGVzY3JpcHRpb246IFdlYiBpbnRlcmZhY2UgdG8gYSBDVlMgc2VydmVyIHdpdGggdGhlIGtlcm5lbAogICAgICAgc291cmNlcy4gIkhlcmUgeW91IGNhbiBoYXZlIGEgbG9vayBhdCBhbnkgZmlsZSBvZiB0aGUgTGludXgga2VybmVsCiAgICAgICBzb3VyY2VzIG9mIGFueSB2ZXJzaW9uIHN0YXJ0aW5nIGZyb20gMS4wIHVwIHRvIHRoZSAoZGFpbHkgdXBkYXRlZCkKICAgICAgIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUuIEFsc28geW91IGNhbiBjaGVjayB0aGUgZGlmZmVyZW5jZXMKICAgICAgIGJldHdlZW4gdHdvIHZlcnNpb25zIG9mIGEgZmlsZSIuCiAgICAgICAKICAgICAqIE5hbWU6ICJDcm9zcy1SZWZlcmVuY2luZyBMaW51eCIKICAgICAgIFVSTDogaHR0cDovL2x4ci5saW51eC5uby9zb3VyY2UvCiAgICAgICBLZXl3b3JkczogQnJvd3Npbmcgc291cmNlIGNvZGUuCiAgICAgICBEZXNjcmlwdGlvbjogQW5vdGhlciB3ZWItYmFzZWQgTGludXgga2VybmVsIHNvdXJjZSBjb2RlIGJyb3dzZXIuCiAgICAgICBMb3RzIG9mIGNyb3NzIHJlZmVyZW5jZXMgdG8gdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMuIFlvdSBjYW4gc2VlCiAgICAgICB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkIGFuZCB3aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgCiAgICAgKiBOYW1lOiAiTGludXggV2Vla2x5IE5ld3MiCiAgICAgICBVUkw6IGh0dHA6Ly9sd24ubmV0CiAgICAgICBLZXl3b3JkczogbGF0ZXN0IGtlcm5lbCBuZXdzLgogICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4gVGhlcmUncyBhIGZpeGVkIGtlcm5lbCBzZWN0aW9uCiAgICAgICBzdW1tYXJpemluZyBkZXZlbG9wZXJzJyB3b3JrLCBidWcgZml4ZXMsIG5ldyBmZWF0dXJlcyBhbmQgdmVyc2lvbnMKICAgICAgIHByb2R1Y2VkIGR1cmluZyB0aGUgd2Vlay4gUHVibGlzaGVkIGV2ZXJ5IFRodXJzZGF5LgogICAgICAgCiAgICAgKiBOYW1lOiAiS2VybmVsIFRyYWZmaWMiCiAgICAgICBVUkw6IGh0dHA6Ly93d3cua2VybmVsdHJhZmZpYy5vcmcva2VybmVsLXRyYWZmaWMvCiAgICAgICBLZXl3b3JkczogbGludXgta2VybmVsIG1haWxpbmcgbGlzdCwgd2Vla2x5IGtlcm5lbCBuZXdzLgogICAgICAgRGVzY3JpcHRpb246IFdlZWtseSBuZXdzbGV0dGVyIGNvdmVyaW5nIHRoZSBtb3N0IHJlbGV2YW50CiAgICAgICBkaXNjdXNzaW9ucyBvZiB0aGUgbGludXgta2VybmVsIG1haWxpbmcgbGlzdC4KICAgICAgIAogICAgICogTmFtZTogIkN1VFRpTkcuZURHZS5MaU51WCIKICAgICAgIFVSTDogaHR0cDovL2VkZ2Uua2VybmVsbm90ZXMub3JnCiAgICAgICBLZXl3b3JkczogY2hhbmdlbGlzdC4KICAgICAgIERlc2NyaXB0aW9uOiBTaXRlIHdoaWNoIHByb3ZpZGVzIHRoZSBjaGFuZ2VsaXN0IGZvciBldmVyeSBrZXJuZWwKICAgICAgIHJlbGVhc2UuIFdoYXQncyBuZXcsIHdoYXQncyBiZXR0ZXIsIHdoYXQncyBjaGFuZ2VkLiBNeXJkcmFhbCByZWFkcwogICAgICAgdGhlIHBhdGNoZXMgYW5kIGRlc2NyaWJlcyB0aGVtLiBQb2ludGVycyB0byB0aGUgcGF0Y2hlcyBhcmUgdGhlcmUsCiAgICAgICB0b28uCiAgICAgICAKICAgICAqIE5hbWU6ICJOZXcgbGludXgta2VybmVsIE1haWxpbmcgTGlzdCBGQVEiCiAgICAgICBVUkw6IGh0dHA6Ly93d3cudHV4Lm9yZy9sa21sLwogICAgICAgS2V5d29yZHM6IGxpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QgRkFRLgogICAgICAgRGVzY3JpcHRpb246IGxpbnV4LWtlcm5lbCBpcyBhIG1haWxpbmcgbGlzdCBmb3IgZGV2ZWxvcGVycyB0bwogICAgICAgY29tbXVuaWNhdGUuIFRoaXMgRkFRIGJ1aWxkcyBvbiB0aGUgcHJldmlvdXMgbGludXgta2VybmVsIG1haWxpbmcKICAgICAgIGxpc3QgRkFRIG1haW50YWluZWQgYnkgRnJvaHdhbHQgRWdlcmVyLCB3aG8gbm8gbG9uZ2VyIG1haW50YWlucwogICAgICAgaXQuIFJlYWQgaXQgdG8gc2VlIGhvdyB0byBqb2luIHRoZSBtYWlsaW5nIGxpc3QuIERvemVucyBvZgogICAgICAgaW50ZXJlc3RpbmcgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGUgbGlzdCwgTGludXgsIGRldmVsb3BlcnMgKHdobwogICAgICAgaXMgLi4uPyksIHRlcm1zICh3aGF0IGlzLi4uPykgYXJlIGFuc3dlcmVkIGhlcmUgdG9vLiBKdXN0IHJlYWQgaXQuCiAgICAgICAKICAgICAqIE5hbWU6ICJMaW51eCBWaXJ0dWFsIEZpbGUgU3lzdGVtIgogICAgICAgQXV0aG9yOiBQZXRlciBKLiBCcmFhbS4KICAgICAgIFVSTDogaHR0cDovL3d3dy5jb2RhLmNzLmNtdS5lZHUvZG9jL3RhbGtzL2xpbnV4dmZzLwogICAgICAgS2V5d29yZHM6IHNsaWRlcywgVkZTLCBpbm9kZSwgc3VwZXJibG9jaywgZGVudHJ5LCBkY2FjaGUuCiAgICAgICBEZXNjcmlwdGlvbjogU2V0IG9mIHNsaWRlcywgcHJlc3VtYWJseSBmcm9tIGEgcHJlc2VudGF0aW9uIG9uIHRoZQogICAgICAgTGludXggVkZTIGxheWVyLiBDb3ZlcnMgdmVyc2lvbiAyLjEueCwgd2l0aCBkZW50cmllcyBhbmQgdGhlCiAgICAgICBkY2FjaGUuCiAgICAgICAKICAgICAqIE5hbWU6ICJHYXJ5J3MgRW5jeWNsb3BlZGlhIC0gVGhlIExpbnV4IEtlcm5lbCIKICAgICAgIEF1dGhvcjogR2FyeSAoSSBzdXBwb3NlLi4uKS4KICAgICAgIFVSTDogaHR0cDovL21lbWJlcnMuYWEubmV0L35zd2Vhci9wZWRpYS9rZXJuZWwuaHRtbAogICAgICAgS2V5d29yZHM6IGxpbmtzLCBub3QgZm91bmQgaGVyZT8uCiAgICAgICBEZXNjcmlwdGlvbjogR2FyeSdzIEVuY3ljbG9wZWRpYSBleGlzdHMgdG8gYWxsb3cgdGhlIHJhcGlkIGZpbmRpbmcKICAgICAgIG9mIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGluZm9ybWF0aW9uIG9mIGludGVyZXN0IHRvIEdOVS9MaW51eAogICAgICAgdXNlcnMuIEl0IGhhcyBhYm91dCA0MDAwIGxpbmtzIHRvIGV4dGVybmFsIHBhZ2VzIGluIDE1MCBtYWpvcgogICAgICAgY2F0ZWdvcmllcy4gVGhpcyBsaW5rIGlzIGZvciBrZXJuZWwtc3BlY2lmaWMgbGlua3MsIGRvY3VtZW50cywKICAgICAgIHNpdGVzLi4uIExvb2sgdGhlcmUgaWYgeW91IGNvdWxkIG5vdCBmaW5kIGhlcmUgd2hhdCB5b3Ugd2VyZQogICAgICAgbG9va2luZyBmb3IuCiAgICAgICAKICAgICAqIE5hbWU6ICJUaGUgaG9tZSBwYWdlIG9mIExpbnV4LU1NIgogICAgICAgQXV0aG9yOiBUaGUgTGludXgtTU0gdGVhbS4KICAgICAgIFVSTDogaHR0cDovL2xpbnV4LW1tLm9yZy8KICAgICAgIEtleXdvcmRzOiBtZW1vcnkgbWFuYWdlbWVudCwgTGludXgtTU0sIG1tIHBhdGNoZXMsIFRPRE8sIGRvY3MsCiAgICAgICBtYWlsaW5nIGxpc3QuCiAgICAgICBEZXNjcmlwdGlvbjogU2l0ZSBkZXZvdGVkIHRvIExpbnV4IE1lbW9yeSBNYW5hZ2VtZW50IGRldmVsb3BtZW50LgogICAgICAgTWVtb3J5IHJlbGF0ZWQgcGF0Y2hlcywgSE9XVE9zLCBsaW5rcywgbW0gZGV2ZWxvcGVycy4uLiBEb24ndCBtaXNzCiAgICAgICBpdCBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgZGV2ZWxvcG1lbnQhCiAgICAgICAKICAgICAqIE5hbWU6ICJLZXJuZWwgTmV3YmllcyBJUkMgQ2hhbm5lbCIKICAgICAgIFVSTDogaHR0cDovL3d3dy5rZXJuZWxuZXdiaWVzLm9yZwogICAgICAgS2V5d29yZHM6IElSQywgbmV3YmllcywgY2hhbm5lbCwgYXNraW5nIGRvdWJ0cy4KICAgICAgIERlc2NyaXB0aW9uOiAja2VybmVsbmV3YmllcyBvbiBpcmMub3BlbnByb2plY3RzLm5ldC4gRnJvbSB0aGUgd2ViCiAgICAgICBwYWdlOiAiI2tlcm5lbG5ld2JpZXMgaXMgYW4gSVJDIG5ldHdvcmsgZGVkaWNhdGVkIHRvIHRoZSAnbmV3YmllJwogICAgICAga2VybmVsIGhhY2tlci4gVGhlIGF1ZGllbmNlIG1vc3RseSBjb25zaXN0cyBvZiBwZW9wbGUgd2hvIGFyZQogICAgICAgbGVhcm5pbmcgYWJvdXQgdGhlIGtlcm5lbCwgd29ya2luZyBvbiBrZXJuZWwgcHJvamVjdHMgb3IKICAgICAgIHByb2Zlc3Npb25hbCBrZXJuZWwgaGFja2VycyB0aGF0IHdhbnQgdG8gaGVscCBsZXNzIHNlYXNvbmVkIGtlcm5lbAogICAgICAgcGVvcGxlLiBbLi4uXSAja2VybmVsbmV3YmllcyBpcyBvbiB0aGUgT3BlbiBQcm9qZWN0cyBJUkMgTmV0d29yaywKICAgICAgIHRyeSBpcmMub3BlbnByb2plY3RzLm5ldCBvciBpcmMuPGNvdW50cnk+Lm9wZW5wcm9qZWN0cy5uZXQgYXMgeW91cgogICAgICAgc2VydmVyIGFuZCB0aGVuIC9qb2luICNrZXJuZWxuZXdiaWVzIi4gSXQgYWxzbyBob3N0cyBhcnRpY2xlcywKICAgICAgIGRvY3VtZW50cywgRkFRcy4uLgogICAgICAgCiAgICAgKiBOYW1lOiAibGludXgta2VybmVsIG1haWxpbmcgbGlzdCBhcmNoaXZlcyBhbmQgc2VhcmNoIGVuZ2luZXMiCiAgICAgICBVUkw6IGh0dHA6Ly93d3cudXdzZy5pbmRpYW5hLmVkdS9oeXBlcm1haWwvbGludXgva2VybmVsL2luZGV4Lmh0bWwKICAgICAgIFVSTDogaHR0cDovL3d3dy5rZXJuZWxub3Rlcy5vcmcvbG54bGlzdHMvbGludXgta2VybmVsLwogICAgICAgVVJMOiBodHRwOi8vd3d3Lmdlb2NyYXdsZXIuY29tCiAgICAgICBLZXl3b3JkczogbGludXgta2VybmVsLCBhcmNoaXZlcywgc2VhcmNoLgogICAgICAgRGVzY3JpcHRpb246IFNvbWUgb2YgdGhlIGxpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QgYXJjaGl2ZXJzLiBJZgogICAgICAgeW91IGhhdmUgYSBiZXR0ZXIvYW5vdGhlciBvbmUsIHBsZWFzZSBsZXQgbWUga25vdy4KICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogICAKICAgRG9jdW1lbnQgbGFzdCB1cGRhdGVkIG9uIFRodSBKdW4gMjggMTU6MDk6MzkgQ0VTVCAyMDAxCg==