@akta/sdk 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/auction/index.js +5 -5
  2. package/dist/auction/index.mjs +4 -4
  3. package/dist/{chunk-C3Q3DYPD.mjs → chunk-2AR3LS5J.mjs} +3 -3
  4. package/dist/{chunk-C3Q3DYPD.mjs.map → chunk-2AR3LS5J.mjs.map} +1 -1
  5. package/dist/{chunk-IZTB6YOJ.js → chunk-2WOYNNPV.js} +8 -8
  6. package/dist/{chunk-IZTB6YOJ.js.map → chunk-2WOYNNPV.js.map} +1 -1
  7. package/dist/{chunk-WPATZWNC.mjs → chunk-4ANINCSI.mjs} +3 -3
  8. package/dist/{chunk-BP23PXOA.js → chunk-5M6DY6Q7.js} +7 -7
  9. package/dist/{chunk-BP23PXOA.js.map → chunk-5M6DY6Q7.js.map} +1 -1
  10. package/dist/{chunk-N4PQF2XF.mjs → chunk-6MGMITC7.mjs} +3 -3
  11. package/dist/{chunk-IOSDIJTT.mjs → chunk-6PHYDWAI.mjs} +3 -3
  12. package/dist/{chunk-I2AH4XA6.js → chunk-76JFN4TN.js} +6 -6
  13. package/dist/{chunk-I2AH4XA6.js.map → chunk-76JFN4TN.js.map} +1 -1
  14. package/dist/{chunk-VARI5DBW.js → chunk-B3ANVNAW.js} +31 -31
  15. package/dist/{chunk-VARI5DBW.js.map → chunk-B3ANVNAW.js.map} +1 -1
  16. package/dist/{chunk-APOVSDCN.mjs → chunk-CPU7YHCB.mjs} +2 -2
  17. package/dist/{chunk-BTVZKNNI.js → chunk-FQEKBA3B.js} +5 -5
  18. package/dist/{chunk-BTVZKNNI.js.map → chunk-FQEKBA3B.js.map} +1 -1
  19. package/dist/{chunk-ZABE6CV7.mjs → chunk-FZXOT7SC.mjs} +3 -3
  20. package/dist/{chunk-TGH7PFXC.mjs → chunk-GRR6MUNV.mjs} +3 -3
  21. package/dist/{chunk-M5QOSPKZ.js → chunk-GVPFBZMF.js} +5 -5
  22. package/dist/{chunk-M5QOSPKZ.js.map → chunk-GVPFBZMF.js.map} +1 -1
  23. package/dist/{chunk-MATDF7EM.mjs → chunk-H76YCOUY.mjs} +4 -4
  24. package/dist/{chunk-LW57YWGF.js → chunk-HHXP4XDJ.js} +5 -5
  25. package/dist/{chunk-LW57YWGF.js.map → chunk-HHXP4XDJ.js.map} +1 -1
  26. package/dist/{chunk-5CPWIJNS.js → chunk-HIDVSX3C.js} +7 -7
  27. package/dist/{chunk-5CPWIJNS.js.map → chunk-HIDVSX3C.js.map} +1 -1
  28. package/dist/{chunk-7C2J3XNH.js → chunk-HT2LVEDG.js} +5 -5
  29. package/dist/{chunk-7C2J3XNH.js.map → chunk-HT2LVEDG.js.map} +1 -1
  30. package/dist/{chunk-VNBPUJXA.mjs → chunk-IERRX2GS.mjs} +3 -3
  31. package/dist/{chunk-QZWXM2GR.mjs → chunk-IWPVSICN.mjs} +3 -3
  32. package/dist/{chunk-LAANYMUP.mjs → chunk-JMZYQMSW.mjs} +3 -3
  33. package/dist/{chunk-HXF3JLNE.js → chunk-JPV3DVL6.js} +10 -10
  34. package/dist/{chunk-HXF3JLNE.js.map → chunk-JPV3DVL6.js.map} +1 -1
  35. package/dist/{chunk-5F5IFJ2J.mjs → chunk-KPXE4SEJ.mjs} +2 -2
  36. package/dist/{chunk-FVFLY5A6.js → chunk-LYG4MDFV.js} +6 -6
  37. package/dist/{chunk-FVFLY5A6.js.map → chunk-LYG4MDFV.js.map} +1 -1
  38. package/dist/{chunk-XASWHIKG.js → chunk-MDSBD67B.js} +6 -6
  39. package/dist/{chunk-XASWHIKG.js.map → chunk-MDSBD67B.js.map} +1 -1
  40. package/dist/{chunk-WEGE45N2.mjs → chunk-MOHS2K45.mjs} +3 -3
  41. package/dist/{chunk-CC6LCTVW.mjs → chunk-NANBUL67.mjs} +2 -2
  42. package/dist/{chunk-C7GS6GJZ.mjs → chunk-OYSHMZRR.mjs} +4 -4
  43. package/dist/{chunk-ZHFTRBE6.mjs → chunk-SGXO2K4C.mjs} +3 -3
  44. package/dist/{chunk-RZUZCM44.js → chunk-SQH64QTI.js} +4 -4
  45. package/dist/{chunk-RZUZCM44.js.map → chunk-SQH64QTI.js.map} +1 -1
  46. package/dist/{chunk-4M6IGGNM.js → chunk-UWAIIBII.js} +3 -3
  47. package/dist/{chunk-4M6IGGNM.js.map → chunk-UWAIIBII.js.map} +1 -1
  48. package/dist/{chunk-MGXVNKUX.js → chunk-V2TNS6B5.js} +8 -8
  49. package/dist/{chunk-MGXVNKUX.js.map → chunk-V2TNS6B5.js.map} +1 -1
  50. package/dist/{chunk-S7HZC5RM.js → chunk-VL2UI54Z.js} +5 -5
  51. package/dist/{chunk-S7HZC5RM.js.map → chunk-VL2UI54Z.js.map} +1 -1
  52. package/dist/{chunk-SXS2YREI.mjs → chunk-VVRQI5IY.mjs} +4 -4
  53. package/dist/{chunk-B54US4TN.mjs → chunk-XNWIPDFE.mjs} +4 -4
  54. package/dist/{chunk-ZW5I4BM7.js → chunk-YHMGRIY5.js} +8 -8
  55. package/dist/{chunk-ZW5I4BM7.js.map → chunk-YHMGRIY5.js.map} +1 -1
  56. package/dist/{chunk-KMVWSUUI.js → chunk-ZBVJPS4Y.js} +10 -10
  57. package/dist/{chunk-KMVWSUUI.js.map → chunk-ZBVJPS4Y.js.map} +1 -1
  58. package/dist/dao/index.js +5 -5
  59. package/dist/dao/index.mjs +4 -4
  60. package/dist/dao-deployable/index.js +7 -7
  61. package/dist/dao-deployable/index.mjs +4 -4
  62. package/dist/escrow/index.js +4 -4
  63. package/dist/escrow/index.mjs +3 -3
  64. package/dist/gates/index.js +4 -4
  65. package/dist/gates/index.mjs +3 -3
  66. package/dist/hyper-swap/index.js +4 -4
  67. package/dist/hyper-swap/index.mjs +3 -3
  68. package/dist/index.js +19 -19
  69. package/dist/index.mjs +18 -18
  70. package/dist/marketplace/index.js +5 -5
  71. package/dist/marketplace/index.mjs +4 -4
  72. package/dist/meta-merkles/index.js +4 -4
  73. package/dist/meta-merkles/index.mjs +3 -3
  74. package/dist/poll/index.js +4 -4
  75. package/dist/poll/index.mjs +3 -3
  76. package/dist/prize-box/index.js +4 -4
  77. package/dist/prize-box/index.mjs +3 -3
  78. package/dist/raffle/index.js +5 -5
  79. package/dist/raffle/index.mjs +4 -4
  80. package/dist/rewards/index.js +4 -4
  81. package/dist/rewards/index.mjs +3 -3
  82. package/dist/social/index.js +3 -3
  83. package/dist/social/index.mjs +2 -2
  84. package/dist/staking/index.js +4 -4
  85. package/dist/staking/index.mjs +3 -3
  86. package/dist/staking-pool/index.js +4 -4
  87. package/dist/staking-pool/index.mjs +3 -3
  88. package/dist/subscriptions/index.js +4 -4
  89. package/dist/subscriptions/index.mjs +3 -3
  90. package/dist/wallet/index.js +4 -4
  91. package/dist/wallet/index.mjs +3 -3
  92. package/package.json +1 -1
  93. /package/dist/{chunk-WPATZWNC.mjs.map → chunk-4ANINCSI.mjs.map} +0 -0
  94. /package/dist/{chunk-N4PQF2XF.mjs.map → chunk-6MGMITC7.mjs.map} +0 -0
  95. /package/dist/{chunk-IOSDIJTT.mjs.map → chunk-6PHYDWAI.mjs.map} +0 -0
  96. /package/dist/{chunk-APOVSDCN.mjs.map → chunk-CPU7YHCB.mjs.map} +0 -0
  97. /package/dist/{chunk-ZABE6CV7.mjs.map → chunk-FZXOT7SC.mjs.map} +0 -0
  98. /package/dist/{chunk-TGH7PFXC.mjs.map → chunk-GRR6MUNV.mjs.map} +0 -0
  99. /package/dist/{chunk-MATDF7EM.mjs.map → chunk-H76YCOUY.mjs.map} +0 -0
  100. /package/dist/{chunk-VNBPUJXA.mjs.map → chunk-IERRX2GS.mjs.map} +0 -0
  101. /package/dist/{chunk-QZWXM2GR.mjs.map → chunk-IWPVSICN.mjs.map} +0 -0
  102. /package/dist/{chunk-LAANYMUP.mjs.map → chunk-JMZYQMSW.mjs.map} +0 -0
  103. /package/dist/{chunk-5F5IFJ2J.mjs.map → chunk-KPXE4SEJ.mjs.map} +0 -0
  104. /package/dist/{chunk-WEGE45N2.mjs.map → chunk-MOHS2K45.mjs.map} +0 -0
  105. /package/dist/{chunk-CC6LCTVW.mjs.map → chunk-NANBUL67.mjs.map} +0 -0
  106. /package/dist/{chunk-C7GS6GJZ.mjs.map → chunk-OYSHMZRR.mjs.map} +0 -0
  107. /package/dist/{chunk-ZHFTRBE6.mjs.map → chunk-SGXO2K4C.mjs.map} +0 -0
  108. /package/dist/{chunk-SXS2YREI.mjs.map → chunk-VVRQI5IY.mjs.map} +0 -0
  109. /package/dist/{chunk-B54US4TN.mjs.map → chunk-XNWIPDFE.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kylebreeding/akita/akita-sc/projects/akita-sdk/dist/chunk-I2AH4XA6.js","../src/poll/index.ts","../src/generated/PollClient.ts","../src/poll/types.ts","../src/poll/factory.ts","../src/generated/PollFactoryClient.ts"],"names":["PollTypeEnum","APP_SPEC","_AppFactory","_AppClient","getArc56ReturnValue","microAlgo"],"mappings":"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","file":"/Users/kylebreeding/akita/akita-sc/projects/akita-sdk/dist/chunk-I2AH4XA6.js","sourcesContent":[null,"import { microAlgo } from \"@algorandfoundation/algokit-utils\";\nimport { BaseSDK } from \"../base\";\nimport {\n PollClient,\n PollFactory,\n} from '../generated/PollClient';\nimport { MaybeSigner, NewContractSDKParams } from \"../types\";\nimport {\n VoteParams,\n DeleteBoxesParams,\n HasVotedParams,\n PollState,\n VOTES_MBR,\n} from \"./types\";\n\nexport * from \"./factory\";\nexport * from \"./types\";\n\n/**\n * SDK for interacting with an individual Poll contract.\n * Use this to vote, check voting status, and manage poll cleanup.\n */\nexport class PollSDK extends BaseSDK<PollClient> {\n\n constructor(params: NewContractSDKParams) {\n super({ factory: PollFactory, ...params });\n }\n\n // ========== Read Methods ==========\n\n /**\n * Gets the current state of the poll.\n */\n async state(): Promise<PollState> {\n const state = await this.client.state.global.getAll();\n\n return {\n type: Number(state.type ?? 0),\n gateId: state.gateId ?? 0n,\n endTime: state.endTime ?? 0n,\n optionCount: state.optionCount ?? 0n,\n maxSelected: state.maxSelected ?? 0n,\n boxCount: state.boxCount ?? 0n,\n question: state.question ?? '',\n optionOne: state.optionOne ?? '',\n optionTwo: state.optionTwo ?? '',\n optionThree: state.optionThree ?? '',\n optionFour: state.optionFour ?? '',\n optionFive: state.optionFive ?? '',\n votesOne: state.votesOne ?? 0n,\n votesTwo: state.votesTwo ?? 0n,\n votesThree: state.votesThree ?? 0n,\n votesFour: state.votesFour ?? 0n,\n votesFive: state.votesFive ?? 0n,\n };\n }\n\n /**\n * Checks if the poll has ended.\n */\n async hasEnded(): Promise<boolean> {\n const pollState = await this.state();\n const now = BigInt(Math.floor(Date.now() / 1000));\n return now > pollState.endTime;\n }\n\n /**\n * Checks if a user has voted in the poll.\n */\n async hasVoted({ user }: HasVotedParams): Promise<boolean> {\n const hasVoted = await this.client.hasVoted({ args: { user } });\n return hasVoted ?? false;\n }\n\n /**\n * Gets the options as an array.\n */\n async getOptions(): Promise<string[]> {\n const pollState = await this.state();\n const options: string[] = [];\n \n if (pollState.optionCount >= 1n) options.push(pollState.optionOne);\n if (pollState.optionCount >= 2n) options.push(pollState.optionTwo);\n if (pollState.optionCount >= 3n) options.push(pollState.optionThree);\n if (pollState.optionCount >= 4n) options.push(pollState.optionFour);\n if (pollState.optionCount >= 5n) options.push(pollState.optionFive);\n \n return options;\n }\n\n /**\n * Gets the vote counts as an array.\n */\n async getVoteCounts(): Promise<bigint[]> {\n const pollState = await this.state();\n const votes: bigint[] = [];\n \n if (pollState.optionCount >= 1n) votes.push(pollState.votesOne);\n if (pollState.optionCount >= 2n) votes.push(pollState.votesTwo);\n if (pollState.optionCount >= 3n) votes.push(pollState.votesThree);\n if (pollState.optionCount >= 4n) votes.push(pollState.votesFour);\n if (pollState.optionCount >= 5n) votes.push(pollState.votesFive);\n \n return votes;\n }\n\n // ========== Write Methods ==========\n\n /**\n * Casts a vote in the poll.\n * Provide `gateTxn` for gated polls.\n * @param votes - Array of option indices (0-based) to vote for\n */\n async vote({ sender, signer, votes, gateTxn }: VoteParams): Promise<void> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n const mbrPayment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(VOTES_MBR),\n receiver: this.client.appAddress,\n });\n\n if (gateTxn) {\n await this.client.send.gatedVote({\n ...sendParams,\n args: {\n mbrPayment,\n gateTxn,\n votes,\n },\n });\n } else {\n await this.client.send.vote({\n ...sendParams,\n args: {\n mbrPayment,\n votes,\n },\n });\n }\n }\n\n /**\n * Deletes vote boxes and refunds MBR to voters.\n * Can only be called after the poll has ended.\n * @param addresses - Array of addresses to refund\n */\n async deleteBoxes({ sender, signer, addresses }: DeleteBoxesParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.deleteBoxes({\n ...sendParams,\n args: { addresses },\n });\n }\n}\n\n","/* eslint-disable */\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^7\n */\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\nimport { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport {\n AppClient as _AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n} from '@algorandfoundation/algokit-utils/types/app-client'\nimport { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\nimport { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n\nexport const APP_SPEC: Arc56Contract = {\"name\":\"Poll\",\"structs\":{},\"methods\":[{\"name\":\"create\",\"args\":[{\"type\":\"uint64\",\"name\":\"akitaDAO\"},{\"type\":\"uint8\",\"name\":\"type\"},{\"type\":\"uint64\",\"name\":\"endTime\"},{\"type\":\"uint64\",\"name\":\"maxSelected\"},{\"type\":\"string\",\"name\":\"question\"},{\"type\":\"string[]\",\"name\":\"options\"},{\"type\":\"uint64\",\"name\":\"gateID\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[\"NoOp\"],\"call\":[]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"deleteBoxes\",\"args\":[{\"type\":\"address[]\",\"name\":\"addresses\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"gatedVote\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"appl\",\"name\":\"gateTxn\"},{\"type\":\"uint64[]\",\"name\":\"votes\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"vote\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"uint64[]\",\"name\":\"votes\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"hasVoted\",\"args\":[{\"type\":\"address\",\"name\":\"user\"}],\"returns\":{\"type\":\"bool\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"events\":[],\"recommendations\":{}},{\"name\":\"updateAkitaDAO\",\"args\":[{\"type\":\"uint64\",\"name\":\"akitaDAO\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"opUp\",\"args\":[],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}}],\"arcs\":[22,28],\"networks\":{},\"state\":{\"schema\":{\"global\":{\"ints\":11,\"bytes\":8},\"local\":{\"ints\":0,\"bytes\":0}},\"keys\":{\"global\":{\"type\":{\"keyType\":\"AVMString\",\"valueType\":\"uint8\",\"key\":\"dHlwZQ==\",\"desc\":\"The type of poll: SingleChoice, MultipleChoice, SingleChoiceImpact or MultipleChoiceImpact\"},\"gateID\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"Z2F0ZV9pZA==\",\"desc\":\"the gate id to be used for filtering who can interact with this poll\"},\"endTime\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"ZW5kX3RpbWU=\",\"desc\":\"the time the poll ends as a unix timestamp\"},\"optionCount\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"b3B0aW9uX2NvdW50\",\"desc\":\"the number of options in the poll\"},\"maxSelected\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"bWF4X3NlbGVjdGVk\",\"desc\":\"the maximum number of selections in a multiple choice poll\"},\"boxCount\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"Ym94X2NvdW50\",\"desc\":\"the number of boxes created during the poll\"},\"question\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"cXVlc3Rpb24=\",\"desc\":\"the question being asked\"},\"optionOne\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"b3B0aW9uX29uZQ==\",\"desc\":\"the options and vote counts of the poll\"},\"optionTwo\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"b3B0aW9uX3R3bw==\"},\"optionThree\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"b3B0aW9uX3RocmVl\"},\"optionFour\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"b3B0aW9uX2ZvdXI=\"},\"optionFive\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"b3B0aW9uX2ZpdmU=\"},\"votesOne\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"dm90ZXNfb25l\",\"desc\":\"the number of votes for each option\"},\"votesTwo\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"dm90ZXNfdHdv\"},\"votesThree\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"dm90ZXNfdGhyZWU=\"},\"votesFour\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"dm90ZXNfZm91cg==\"},\"votesFive\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"dm90ZXNfZml2ZQ==\"},\"version\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"dmVyc2lvbg==\",\"desc\":\"the current version of the contract\"},\"akitaDAO\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"YWtpdGFfZGFv\",\"desc\":\"the app ID of the Akita DAO\"}},\"local\":{},\"box\":{}},\"maps\":{\"global\":{},\"local\":{},\"box\":{\"votes\":{\"keyType\":\"address\",\"valueType\":\"AVMBytes\",\"desc\":\"A map of addresses to empty bytes to track who has voted\",\"prefix\":\"\"}}}},\"bareActions\":{\"create\":[],\"call\":[]},\"sourceInfo\":{\"approval\":{\"sourceInfo\":[{\"pc\":[1189],\"errorMessage\":\"Bytes has valid prefix\"},{\"pc\":[316],\"errorMessage\":\"End time must be in the future\"},{\"pc\":[915],\"errorMessage\":\"Gate check failed\"},{\"pc\":[407],\"errorMessage\":\"Invalid maximum selection\"},{\"pc\":[371],\"errorMessage\":\"Invalid number of options, must be between 2 and 5\"},{\"pc\":[1228,1378],\"errorMessage\":\"Invalid number of vote args\"},{\"pc\":[931,1028],\"errorMessage\":\"Invalid payment\"},{\"pc\":[323],\"errorMessage\":\"Invalid poll type\"},{\"pc\":[822,1005],\"errorMessage\":\"Invalid vote args\"},{\"pc\":[1246,1417,1445],\"errorMessage\":\"Invalid vote option\"},{\"pc\":[310],\"errorMessage\":\"Must be deployed by an application\"},{\"pc\":[162],\"errorMessage\":\"OnCompletion must be NoOp\"},{\"pc\":[1097],\"errorMessage\":\"Only the Akita DAO can call this function\"},{\"pc\":[803,986],\"errorMessage\":\"Poll has ended\"},{\"pc\":[656],\"errorMessage\":\"Poll is still active\"},{\"pc\":[1012],\"errorMessage\":\"This has a gate\"},{\"pc\":[810,993],\"errorMessage\":\"User has already voted\"},{\"pc\":[685],\"errorMessage\":\"User has not voted\"},{\"pc\":[1095],\"errorMessage\":\"application exists\"},{\"pc\":[654,735,801,827,839,984,1010,1082,1117,1129,1141,1202,1214,1240,1253,1269,1291,1311,1332,1354,1376,1413,1461,1485,1505,1526,1548],\"errorMessage\":\"check GlobalState exists\"},{\"pc\":[435,469,505,548,590,680],\"errorMessage\":\"index access is out of bounds\"},{\"pc\":[794,977],\"errorMessage\":\"invalid number of bytes for (len+uint64[])\"},{\"pc\":[647],\"errorMessage\":\"invalid number of bytes for (len+uint8[32][])\"},{\"pc\":[287],\"errorMessage\":\"invalid number of bytes for (len+utf8[])\"},{\"pc\":[242,262,271,306,1074,1194],\"errorMessage\":\"invalid number of bytes for uint64\"},{\"pc\":[254],\"errorMessage\":\"invalid number of bytes for uint8\"},{\"pc\":[1049],\"errorMessage\":\"invalid number of bytes for uint8[32]\"},{\"pc\":[774],\"errorMessage\":\"transaction type is appl\"},{\"pc\":[763,957],\"errorMessage\":\"transaction type is pay\"}],\"pcOffsetMethod\":\"none\"},\"clear\":{\"sourceInfo\":[],\"pcOffsetMethod\":\"none\"}},\"source\":{\"approval\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgOCAxNTMwMAogICAgYnl0ZWNibG9jayAidm90ZXNfb25lIiAidm90ZXNfdHdvIiAidm90ZXNfdGhyZWUiICJ2b3Rlc19mb3VyIiAidm90ZXNfZml2ZSIgImFraXRhX2RhbyIgInR5cGUiICJib3hfY291bnQiICJlbmRfdGltZSIgImdhdGVfaWQiICJvcHRpb25fY291bnQiICJtYXhfc2VsZWN0ZWQiIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIHZvdGVzT25lID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlWb3Rlc09uZSB9KQogICAgYnl0ZWNfMCAvLyAidm90ZXNfb25lIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB2b3Rlc1R3byA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUd28gfSkKICAgIGJ5dGVjXzEgLy8gInZvdGVzX3R3byIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gdm90ZXNUaHJlZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUaHJlZSB9KQogICAgYnl0ZWNfMiAvLyAidm90ZXNfdGhyZWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIHZvdGVzRm91ciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNGb3VyIH0pCiAgICBieXRlY18zIC8vICJ2b3Rlc19mb3VyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyB2b3Rlc0ZpdmUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzRml2ZSB9KQogICAgYnl0ZWMgNCAvLyAidm90ZXNfZml2ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9sbCBleHRlbmRzIEFraXRhQmFzZUNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxMgogICAgcHVzaGJ5dGVzcyAweGUxNDE5MDgwIDB4NWJjZjkxMDAgMHhkZDMwOWM3YiAweDVhN2Y0OTMyIDB4MzNlOTJjOTQgMHg4NTRkZWRlMCAvLyBtZXRob2QgImRlbGV0ZUJveGVzKGFkZHJlc3NbXSl2b2lkIiwgbWV0aG9kICJnYXRlZFZvdGUocGF5LGFwcGwsdWludDY0W10pdm9pZCIsIG1ldGhvZCAidm90ZShwYXksdWludDY0W10pdm9pZCIsIG1ldGhvZCAiaGFzVm90ZWQoYWRkcmVzcylib29sIiwgbWV0aG9kICJ1cGRhdGVBa2l0YURBTyh1aW50NjQpdm9pZCIsIG1ldGhvZCAib3BVcCgpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGRlbGV0ZUJveGVzIGdhdGVkVm90ZSB2b3RlIGhhc1ZvdGVkIHVwZGF0ZUFraXRhREFPIG1haW5fb3BVcF9yb3V0ZUAxMAogICAgZXJyCgptYWluX29wVXBfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo0MwogICAgLy8gb3BVcCgpOiB2b2lkIHsgfQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVfTm9PcEAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb2xsIGV4dGVuZHMgQWtpdGFCYXNlQ29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4OWZhODM1YTggLy8gbWV0aG9kICJjcmVhdGUodWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQsc3RyaW5nLHN0cmluZ1tdLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlCiAgICBlcnIKCgovLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjpQb2xsLmNyZWF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE0NgogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE1NgogICAgLy8gYXNzZXJ0KEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkICE9PSAwLCBFUlJfQkFEX0RFUExPWUVSKQogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBNdXN0IGJlIGRlcGxveWVkIGJ5IGFuIGFwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE1NwogICAgLy8gYXNzZXJ0KEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgPCBlbmRUaW1lLCBFUlJfSU5WQUxJRF9FTkRfVElNRSkKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGRpZyA0CiAgICA8CiAgICBhc3NlcnQgLy8gRW5kIHRpbWUgbXVzdCBiZSBpbiB0aGUgZnV0dXJlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gYXNzZXJ0KHR5cGUuYXNVaW50NjQoKSA8IE11bHRpcGxlQ2hvaWNlSW1wYWN0LmFzVWludDY0KCksIEVSUl9JTlZBTElEX1BPTExfVFlQRSkKICAgIGRpZyA0CiAgICBidG9pCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICA8CiAgICBhc3NlcnQgLy8gSW52YWxpZCBwb2xsIHR5cGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWMgNSAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIHRoaXMuYWtpdGFEQU8udmFsdWUgPSBBcHBsaWNhdGlvbihha2l0YURBTykKICAgIHVuY292ZXIgNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIHR5cGUgPSBHbG9iYWxTdGF0ZTxVaW50OD4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVR5cGUgfSkKICAgIGJ5dGVjIDYgLy8gInR5cGUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gdGhpcy50eXBlLnZhbHVlID0gdHlwZQogICAgdW5jb3ZlciA1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gZ2F0ZUlEID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5R2F0ZUlEIH0pCiAgICBieXRlYyA5IC8vICJnYXRlX2lkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIHRoaXMuZ2F0ZUlELnZhbHVlID0gZ2F0ZUlECiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo2NwogICAgLy8gZW5kVGltZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleUVuZFRpbWUgfSkKICAgIGJ5dGVjIDggLy8gImVuZF90aW1lIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIHRoaXMuZW5kVGltZS52YWx1ZSA9IGVuZFRpbWUKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHF1ZXN0aW9uID0gR2xvYmFsU3RhdGU8c3RyaW5nPih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5UXVlc3Rpb24gfSkKICAgIHB1c2hieXRlcyAicXVlc3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE2NAogICAgLy8gdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHF1ZXN0aW9uCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNjYKICAgIC8vIGFzc2VydChvcHRpb25zLmxlbmd0aCA+PSAyICYmIG9wdGlvbnMubGVuZ3RoIDw9IDUsIEVSUl9JTlZBTElEX09QVElPTl9DT1VOVCkKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgPj0KICAgIGJ6IGNyZWF0ZV9ib29sX2ZhbHNlQDQKICAgIGR1cAogICAgcHVzaGludCA1IC8vIDUKICAgIDw9CiAgICBieiBjcmVhdGVfYm9vbF9mYWxzZUA0CiAgICBpbnRjXzEgLy8gMQoKY3JlYXRlX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQob3B0aW9ucy5sZW5ndGggPj0gMiAmJiBvcHRpb25zLmxlbmd0aCA8PSA1LCBFUlJfSU5WQUxJRF9PUFRJT05fQ09VTlQpCiAgICBhc3NlcnQgLy8gSW52YWxpZCBudW1iZXIgb2Ygb3B0aW9ucywgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTY4CiAgICAvLyBpZiAodHlwZSA9PT0gTXVsdGlwbGVDaG9pY2UgfHwgdHlwZSA9PT0gTXVsdGlwbGVDaG9pY2VJbXBhY3QpIHsKICAgIGRpZyAzCiAgICBwdXNoYnl0ZXMgMHgxNAogICAgPT0KICAgIGJueiBjcmVhdGVfaWZfYm9keUA3CiAgICBkaWcgMwogICAgcHVzaGJ5dGVzIDB4MjgKICAgID09CiAgICBieiBjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxMgoKY3JlYXRlX2lmX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyBhc3NlcnQobWF4U2VsZWN0ZWQgPj0gMiAmJiBtYXhTZWxlY3RlZCA8PSBvcHRpb25zLmxlbmd0aCAtIDEsIEVSUl9JTlZBTElEX01BWF9TRUxFQ1RJT04pCiAgICBkaWcgMgogICAgaW50Y18yIC8vIDIKICAgID49CiAgICBieiBjcmVhdGVfYm9vbF9mYWxzZUAxMAogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDMKICAgID49CiAgICBieiBjcmVhdGVfYm9vbF9mYWxzZUAxMAogICAgaW50Y18xIC8vIDEKCmNyZWF0ZV9ib29sX21lcmdlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIGFzc2VydChtYXhTZWxlY3RlZCA+PSAyICYmIG1heFNlbGVjdGVkIDw9IG9wdGlvbnMubGVuZ3RoIC0gMSwgRVJSX0lOVkFMSURfTUFYX1NFTEVDVElPTikKICAgIGFzc2VydCAvLyBJbnZhbGlkIG1heGltdW0gc2VsZWN0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBtYXhTZWxlY3RlZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleU1heFNlbGVjdGVkIH0pCiAgICBieXRlYyAxMSAvLyAibWF4X3NlbGVjdGVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNzAKICAgIC8vIHRoaXMubWF4U2VsZWN0ZWQudmFsdWUgPSBtYXhTZWxlY3RlZAogICAgZGlnIDMKICAgIGFwcF9nbG9iYWxfcHV0CgpjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIG9wdGlvbkNvdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5T3B0aW9uQ291bnQgfSkKICAgIGJ5dGVjIDEwIC8vICJvcHRpb25fY291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gdGhpcy5vcHRpb25Db3VudC52YWx1ZSA9IG9wdGlvbnMubGVuZ3RoCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gYm94Q291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlCb3hDb3VudCB9KQogICAgYnl0ZWMgNyAvLyAiYm94X2NvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIHRoaXMuYm94Q291bnQudmFsdWUgPSAwCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTc2CiAgICAvLyB0aGlzLm9wdGlvbk9uZS52YWx1ZSA9IG9wdGlvbnNbMF0KICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICBidXJ5IDcKICAgIGRpZyAxCiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NzcKICAgIC8vIG9wdGlvbk9uZSA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleU9wdGlvbk9uZSB9KQogICAgcHVzaGJ5dGVzICJvcHRpb25fb25lIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNzYKICAgIC8vIHRoaXMub3B0aW9uT25lLnZhbHVlID0gb3B0aW9uc1swXQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTc3CiAgICAvLyB0aGlzLm9wdGlvblR3by52YWx1ZSA9IG9wdGlvbnNbMV0KICAgIGludGNfMSAvLyAxCiAgICBkaWcgMgogICAgPAogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIG9wdGlvblR3byA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleU9wdGlvblR3byB9KQogICAgcHVzaGJ5dGVzICJvcHRpb25fdHdvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIHRoaXMub3B0aW9uVHdvLnZhbHVlID0gb3B0aW9uc1sxXQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBpZiAob3B0aW9ucy5sZW5ndGggPj0gMykgewogICAgcHVzaGludCAzIC8vIDMKICAgID49CiAgICBieiBjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxODAKICAgIC8vIHRoaXMub3B0aW9uVGhyZWUudmFsdWUgPSBvcHRpb25zWzJdCiAgICBpbnRjXzIgLy8gMgogICAgZGlnIDEKICAgIDwKICAgIGFzc2VydCAvLyBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDQKICAgIGR1cAogICAgcHVzaGludCA0IC8vIDQKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gb3B0aW9uVGhyZWUgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlPcHRpb25UaHJlZSB9KQogICAgcHVzaGJ5dGVzICJvcHRpb25fdGhyZWUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE4MAogICAgLy8gdGhpcy5vcHRpb25UaHJlZS52YWx1ZSA9IG9wdGlvbnNbMl0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyBpZiAob3B0aW9ucy5sZW5ndGggPj0gNCkgewogICAgZHVwCiAgICBwdXNoaW50IDQgLy8gNAogICAgPj0KICAgIGJ6IGNyZWF0ZV9hZnRlcl9pZl9lbHNlQDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gdGhpcy5vcHRpb25Gb3VyLnZhbHVlID0gb3B0aW9uc1szXQogICAgcHVzaGludCAzIC8vIDMKICAgIGRpZyAxCiAgICA8CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyA0CiAgICBkdXAKICAgIHB1c2hpbnQgNiAvLyA2CiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODAKICAgIC8vIG9wdGlvbkZvdXIgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlPcHRpb25Gb3VyIH0pCiAgICBwdXNoYnl0ZXMgIm9wdGlvbl9mb3VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIHRoaXMub3B0aW9uRm91ci52YWx1ZSA9IG9wdGlvbnNbM10KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyBpZiAob3B0aW9ucy5sZW5ndGggPj0gNSkgewogICAgZHVwCiAgICBwdXNoaW50IDUgLy8gNQogICAgPj0KICAgIGJ6IGNyZWF0ZV9hZnRlcl9pZl9lbHNlQDE4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE4OAogICAgLy8gdGhpcy5vcHRpb25GaXZlLnZhbHVlID0gb3B0aW9uc1s0XQogICAgcHVzaGludCA0IC8vIDQKICAgIGRpZyAxCiAgICA8CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyA0CiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODEKICAgIC8vIG9wdGlvbkZpdmUgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlPcHRpb25GaXZlIH0pCiAgICBwdXNoYnl0ZXMgIm9wdGlvbl9maXZlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxODgKICAgIC8vIHRoaXMub3B0aW9uRml2ZS52YWx1ZSA9IG9wdGlvbnNbNF0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTQ2CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlX2Jvb2xfZmFsc2VAMTA6CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVfYm9vbF9tZXJnZUAxMQoKY3JlYXRlX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZV9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjpQb2xsLmRlbGV0ZUJveGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKZGVsZXRlQm94ZXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE5MgogICAgLy8gZGVsZXRlQm94ZXMoYWRkcmVzc2VzOiBBY2NvdW50W10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbMzJdW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gYXNzZXJ0KEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgPiB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0FDVElWRSkKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBlbmRUaW1lID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5RW5kVGltZSB9KQogICAgYnl0ZWMgOCAvLyAiZW5kX3RpbWUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gYXNzZXJ0KEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgPiB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0FDVElWRSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA+CiAgICBhc3NlcnQgLy8gUG9sbCBpcyBzdGlsbCBhY3RpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKZGVsZXRlQm94ZXNfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE5NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogZGVsZXRlQm94ZXNfYWZ0ZXJfd2hpbGVANQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIGFzc2VydCh0aGlzLnZvdGVzKGFkZHJlc3Nlc1tpXSkuZXhpc3RzLCBFUlJfTk9UX1ZPVEVEKQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICAqCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gVXNlciBoYXMgbm90IHZvdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE5OAogICAgLy8gdGhpcy52b3RlcyhhZGRyZXNzZXNbaV0pLmRlbGV0ZSgpCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMDAtMjA2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogYWRkcmVzc2VzW2ldLAogICAgLy8gICAgIGFtb3VudDogdm90ZXNNQlIsCiAgICAvLyAgICAgbm90ZTogJ01CUiByZWZ1bmQgZm9yIHBvbGwgdm90ZScsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIG5vdGU6ICdNQlIgcmVmdW5kIGZvciBwb2xsIHZvdGUnLAogICAgcHVzaGJ5dGVzICJNQlIgcmVmdW5kIGZvciBwb2xsIHZvdGUiCiAgICBpdHhuX2ZpZWxkIE5vdGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjAzCiAgICAvLyBhbW91bnQ6IHZvdGVzTUJSLAogICAgaW50YyA0IC8vIDE1MzAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMDAtMjA1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogYWRkcmVzc2VzW2ldLAogICAgLy8gICAgIGFtb3VudDogdm90ZXNNQlIsCiAgICAvLyAgICAgbm90ZTogJ01CUiByZWZ1bmQgZm9yIHBvbGwgdm90ZScsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIwMC0yMDYKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBhZGRyZXNzZXNbaV0sCiAgICAvLyAgICAgYW1vdW50OiB2b3Rlc01CUiwKICAgIC8vICAgICBub3RlOiAnTUJSIHJlZnVuZCBmb3IgcG9sbCB2b3RlJywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIHRoaXMuYm94Q291bnQudmFsdWUgLT0gMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIGJveENvdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Qm94Q291bnQgfSkKICAgIGJ5dGVjIDcgLy8gImJveF9jb3VudCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjA4CiAgICAvLyB0aGlzLmJveENvdW50LnZhbHVlIC09IDEKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gYm94Q291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlCb3hDb3VudCB9KQogICAgYnl0ZWMgNyAvLyAiYm94X2NvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIHRoaXMuYm94Q291bnQudmFsdWUgLT0gMQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGRlbGV0ZUJveGVzX3doaWxlX3RvcEAyCgpkZWxldGVCb3hlc19hZnRlcl93aGlsZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxOTIKICAgIC8vIGRlbGV0ZUJveGVzKGFkZHJlc3NlczogQWNjb3VudFtdKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo6UG9sbC5nYXRlZFZvdGVbcm91dGluZ10oKSAtPiB2b2lkOgpnYXRlZFZvdGU6CiAgICBpbnRjXzAgLy8gMAogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIxNC0yMTgKICAgIC8vIGdhdGVkVm90ZSgKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBnYXRlVHhuOiBndHhuLkFwcGxpY2F0aW9uQ2FsbFR4biwKICAgIC8vICAgdm90ZXM6IHVpbnQ2NFtdCiAgICAvLyApOiB2b2lkIHsKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzIgLy8gMgogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGFwcGwKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICB1bmNvdmVyIDIKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50NjRbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBhc3NlcnQoR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA8PSB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0VOREVEKQogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIGVuZFRpbWUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlFbmRUaW1lIH0pCiAgICBieXRlYyA4IC8vICJlbmRfdGltZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBhc3NlcnQoR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA8PSB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0VOREVEKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIDw9CiAgICBhc3NlcnQgLy8gUG9sbCBoYXMgZW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIwCiAgICAvLyBhc3NlcnQoIXRoaXMudm90ZXMoVHhuLnNlbmRlcikuZXhpc3RzLCBFUlJfQUxSRUFEWV9WT1RFRCkKICAgIHR4biBTZW5kZXIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIFVzZXIgaGFzIGFscmVhZHkgdm90ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBhc3NlcnQodm90ZXMubGVuZ3RoIDw9IDUgJiYgdm90ZXMubGVuZ3RoID49IDEsIEVSUl9JTlZBTElEX1ZPVEUpCiAgICBwdXNoaW50IDUgLy8gNQogICAgPD0KICAgIGJ6IGdhdGVkVm90ZV9ib29sX2ZhbHNlQDQKICAgIGR1cAogICAgYnogZ2F0ZWRWb3RlX2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKCmdhdGVkVm90ZV9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gYXNzZXJ0KHZvdGVzLmxlbmd0aCA8PSA1ICYmIHZvdGVzLmxlbmd0aCA+PSAxLCBFUlJfSU5WQUxJRF9WT1RFKQogICAgYXNzZXJ0IC8vIEludmFsaWQgdm90ZSBhcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gYXNzZXJ0KGdhdGVDaGVjayhnYXRlVHhuLCB0aGlzLmFraXRhREFPLnZhbHVlLCBUeG4uc2VuZGVyLCB0aGlzLmdhdGVJRC52YWx1ZSksIEVSUl9GQUlMRURfR0FURSkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyOQogICAgLy8gYWtpdGFEQU8gPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFEQU8gfSkKICAgIGJ5dGVjIDUgLy8gImFraXRhX2RhbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBhc3NlcnQoZ2F0ZUNoZWNrKGdhdGVUeG4sIHRoaXMuYWtpdGFEQU8udmFsdWUsIFR4bi5zZW5kZXIsIHRoaXMuZ2F0ZUlELnZhbHVlKSwgRVJSX0ZBSUxFRF9HQVRFKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHR4biBTZW5kZXIKICAgIGJ1cnkgNwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIGdhdGVJRCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleUdhdGVJRCB9KQogICAgYnl0ZWMgOSAvLyAiZ2F0ZV9pZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBhc3NlcnQoZ2F0ZUNoZWNrKGdhdGVUeG4sIHRoaXMuYWtpdGFEQU8udmFsdWUsIFR4bi5zZW5kZXIsIHRoaXMuZ2F0ZUlELnZhbHVlKSwgRVJSX0ZBSUxFRF9HQVRFKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGJ1cnkgNwogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czoyMzMKICAgIC8vIGdhdGVUeG4uYXBwSWQgPT09IEFwcGxpY2F0aW9uKGdldEFraXRhQXBwTGlzdChha2l0YURBTykuZ2F0ZSkgJiYKICAgIGRpZyAzCiAgICBndHhucyBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjQ0CiAgICAvLyBjb25zdCBbYXBwTGlzdEJ5dGVzXSA9IG9wLkFwcEdsb2JhbC5nZXRFeEJ5dGVzKGFraXRhREFPLCBCeXRlcyhBa2l0YURBT0dsb2JhbFN0YXRlS2V5c0FraXRhQXBwTGlzdCkpCiAgICBzd2FwCiAgICBwdXNoYnl0ZXMgImFhbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjMzCiAgICAvLyBnYXRlVHhuLmFwcElkID09PSBBcHBsaWNhdGlvbihnZXRBa2l0YUFwcExpc3QoYWtpdGFEQU8pLmdhdGUpICYmCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjMzLTIzNAogICAgLy8gZ2F0ZVR4bi5hcHBJZCA9PT0gQXBwbGljYXRpb24oZ2V0QWtpdGFBcHBMaXN0KGFraXRhREFPKS5nYXRlKSAmJgogICAgLy8gZ2F0ZVR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcCAmJgogICAgYnogZ2F0ZWRWb3RlX2Jvb2xfZmFsc2VAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjM0CiAgICAvLyBnYXRlVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wICYmCiAgICBkaWcgMgogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjIzMy0yMzQKICAgIC8vIGdhdGVUeG4uYXBwSWQgPT09IEFwcGxpY2F0aW9uKGdldEFraXRhQXBwTGlzdChha2l0YURBTykuZ2F0ZSkgJiYKICAgIC8vIGdhdGVUeG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AgJiYKICAgIGJueiBnYXRlZFZvdGVfYm9vbF9mYWxzZUAxMwogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czoyMzUKICAgIC8vIGdhdGVUeG4ubnVtQXBwQXJncyA9PT0gNCAmJgogICAgZGlnIDIKICAgIGd0eG5zIE51bUFwcEFyZ3MKICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czoyMzMtMjM1CiAgICAvLyBnYXRlVHhuLmFwcElkID09PSBBcHBsaWNhdGlvbihnZXRBa2l0YUFwcExpc3QoYWtpdGFEQU8pLmdhdGUpICYmCiAgICAvLyBnYXRlVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wICYmCiAgICAvLyBnYXRlVHhuLm51bUFwcEFyZ3MgPT09IDQgJiYKICAgIGJ6IGdhdGVkVm90ZV9ib29sX2ZhbHNlQDEzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjIzNgogICAgLy8gZ2F0ZVR4bi5hcHBBcmdzKDApID09PSBtZXRob2RTZWxlY3Rvcjx0eXBlb2YgR2F0ZS5wcm90b3R5cGUubXVzdENoZWNrPigpICYmCiAgICBkaWcgMgogICAgaW50Y18wIC8vIDAKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoYnl0ZXMgMHg0MzkyMjY1NSAvLyBtZXRob2QgIm11c3RDaGVjayhhZGRyZXNzLHVpbnQ2NCxieXRlW11bXSl2b2lkIgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjMzLTIzNgogICAgLy8gZ2F0ZVR4bi5hcHBJZCA9PT0gQXBwbGljYXRpb24oZ2V0QWtpdGFBcHBMaXN0KGFraXRhREFPKS5nYXRlKSAmJgogICAgLy8gZ2F0ZVR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcCAmJgogICAgLy8gZ2F0ZVR4bi5udW1BcHBBcmdzID09PSA0ICYmCiAgICAvLyBnYXRlVHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yPHR5cGVvZiBHYXRlLnByb3RvdHlwZS5tdXN0Q2hlY2s+KCkgJiYKICAgIGJ6IGdhdGVkVm90ZV9ib29sX2ZhbHNlQDEzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjIzNwogICAgLy8gZ2F0ZVR4bi5hcHBBcmdzKDEpID09PSBuZXcgQWRkcmVzcyhjYWxsZXIpLmJ5dGVzICYmCiAgICBkaWcgMgogICAgaW50Y18xIC8vIDEKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgNgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjMzLTIzNwogICAgLy8gZ2F0ZVR4bi5hcHBJZCA9PT0gQXBwbGljYXRpb24oZ2V0QWtpdGFBcHBMaXN0KGFraXRhREFPKS5nYXRlKSAmJgogICAgLy8gZ2F0ZVR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcCAmJgogICAgLy8gZ2F0ZVR4bi5udW1BcHBBcmdzID09PSA0ICYmCiAgICAvLyBnYXRlVHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yPHR5cGVvZiBHYXRlLnByb3RvdHlwZS5tdXN0Q2hlY2s+KCkgJiYKICAgIC8vIGdhdGVUeG4uYXBwQXJncygxKSA9PT0gbmV3IEFkZHJlc3MoY2FsbGVyKS5ieXRlcyAmJgogICAgYnogZ2F0ZWRWb3RlX2Jvb2xfZmFsc2VAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjM4CiAgICAvLyBnYXRlVHhuLmFwcEFyZ3MoMikgPT09IGl0b2IoaWQpCiAgICBkaWcgMgogICAgaW50Y18yIC8vIDIKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgNQogICAgaXRvYgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjMzLTIzOAogICAgLy8gZ2F0ZVR4bi5hcHBJZCA9PT0gQXBwbGljYXRpb24oZ2V0QWtpdGFBcHBMaXN0KGFraXRhREFPKS5nYXRlKSAmJgogICAgLy8gZ2F0ZVR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcCAmJgogICAgLy8gZ2F0ZVR4bi5udW1BcHBBcmdzID09PSA0ICYmCiAgICAvLyBnYXRlVHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yPHR5cGVvZiBHYXRlLnByb3RvdHlwZS5tdXN0Q2hlY2s+KCkgJiYKICAgIC8vIGdhdGVUeG4uYXBwQXJncygxKSA9PT0gbmV3IEFkZHJlc3MoY2FsbGVyKS5ieXRlcyAmJgogICAgLy8gZ2F0ZVR4bi5hcHBBcmdzKDIpID09PSBpdG9iKGlkKQogICAgYnogZ2F0ZWRWb3RlX2Jvb2xfZmFsc2VAMTMKICAgIGludGNfMSAvLyAxCgpnYXRlZFZvdGVfYm9vbF9tZXJnZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBhc3NlcnQoZ2F0ZUNoZWNrKGdhdGVUeG4sIHRoaXMuYWtpdGFEQU8udmFsdWUsIFR4bi5zZW5kZXIsIHRoaXMuZ2F0ZUlELnZhbHVlKSwgRVJSX0ZBSUxFRF9HQVRFKQogICAgYXNzZXJ0IC8vIEdhdGUgY2hlY2sgZmFpbGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIyMy0yMzAKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBtYnJQYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdm90ZXNNQlIsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIzLTIzMAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB2b3Rlc01CUiwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMjcKICAgIC8vIGFtb3VudDogdm90ZXNNQlIsCiAgICBpbnRjIDQgLy8gMTUzMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIzLTIzMAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB2b3Rlc01CUiwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gSW52YWxpZCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gdGhpcy5jcmVhdGVWb3RlKHZvdGVzKQogICAgZGlnIDEKICAgIGNhbGxzdWIgY3JlYXRlVm90ZQogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIxNC0yMTgKICAgIC8vIGdhdGVkVm90ZSgKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBnYXRlVHhuOiBndHhuLkFwcGxpY2F0aW9uQ2FsbFR4biwKICAgIC8vICAgdm90ZXM6IHVpbnQ2NFtdCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdhdGVkVm90ZV9ib29sX2ZhbHNlQDEzOgogICAgaW50Y18wIC8vIDAKICAgIGIgZ2F0ZWRWb3RlX2Jvb2xfbWVyZ2VAMTQKCmdhdGVkVm90ZV9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzAgLy8gMAogICAgYiBnYXRlZFZvdGVfYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo6UG9sbC52b3RlW3JvdXRpbmddKCkgLT4gdm9pZDoKdm90ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyB2b3RlKG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwgdm90ZXM6IHVpbnQ2NFtdKTogdm9pZCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICB1bmNvdmVyIDIKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50NjRbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBhc3NlcnQoR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA8PSB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0VOREVEKQogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIGVuZFRpbWUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlFbmRUaW1lIH0pCiAgICBieXRlYyA4IC8vICJlbmRfdGltZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBhc3NlcnQoR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA8PSB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0VOREVEKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIDw9CiAgICBhc3NlcnQgLy8gUG9sbCBoYXMgZW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM3CiAgICAvLyBhc3NlcnQoIXRoaXMudm90ZXMoVHhuLnNlbmRlcikuZXhpc3RzLCBFUlJfQUxSRUFEWV9WT1RFRCkKICAgIHR4biBTZW5kZXIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIFVzZXIgaGFzIGFscmVhZHkgdm90ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBhc3NlcnQodm90ZXMubGVuZ3RoIDw9IDUgJiYgdm90ZXMubGVuZ3RoID49IDEsIEVSUl9JTlZBTElEX1ZPVEUpCiAgICBwdXNoaW50IDUgLy8gNQogICAgPD0KICAgIGJ6IHZvdGVfYm9vbF9mYWxzZUA0CiAgICBkdXAKICAgIGJ6IHZvdGVfYm9vbF9mYWxzZUA0CiAgICBpbnRjXzEgLy8gMQoKdm90ZV9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIzOAogICAgLy8gYXNzZXJ0KHZvdGVzLmxlbmd0aCA8PSA1ICYmIHZvdGVzLmxlbmd0aCA+PSAxLCBFUlJfSU5WQUxJRF9WT1RFKQogICAgYXNzZXJ0IC8vIEludmFsaWQgdm90ZSBhcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gYXNzZXJ0KHRoaXMuZ2F0ZUlELnZhbHVlID09PSAwLCBFUlJfSEFTX0dBVEUpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gZ2F0ZUlEID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5R2F0ZUlEIH0pCiAgICBieXRlYyA5IC8vICJnYXRlX2lkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMzkKICAgIC8vIGFzc2VydCh0aGlzLmdhdGVJRC52YWx1ZSA9PT0gMCwgRVJSX0hBU19HQVRFKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBUaGlzIGhhcyBhIGdhdGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjQwLTI0NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB2b3Rlc01CUiwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDIKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjQzCiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyNDAtMjQ3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHZvdGVzTUJSLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjI0NAogICAgLy8gYW1vdW50OiB2b3Rlc01CUiwKICAgIGludGMgNCAvLyAxNTMwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyNDAtMjQ3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHZvdGVzTUJSLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBJbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyB0aGlzLmNyZWF0ZVZvdGUodm90ZXMpCiAgICBkaWcgMQogICAgY2FsbHN1YiBjcmVhdGVWb3RlCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyB2b3RlKG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwgdm90ZXM6IHVpbnQ2NFtdKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgp2b3RlX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIHZvdGVfYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo6UG9sbC5oYXNWb3RlZFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cmhhc1ZvdGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyNTIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIHJldHVybiB0aGlzLnZvdGVzKHVzZXIpLmV4aXN0cwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlYyAxMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjpBa2l0YUJhc2VDb250cmFjdC51cGRhdGVBa2l0YURBT1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZUFraXRhREFPOgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzgKICAgIC8vIHVwZGF0ZUFraXRhREFPKGFraXRhREFPOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjM5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWMgNSAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hieXRlcyAid2FsbGV0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmdldEFraXRhREFPV2FsbGV0KCkuYWRkcmVzcywgRVJSX05PVF9BS0lUQV9EQU8pCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgdGhlIEFraXRhIERBTyBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyOQogICAgLy8gYWtpdGFEQU8gPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFEQU8gfSkKICAgIGJ5dGVjIDUgLy8gImFraXRhX2RhbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjQwCiAgICAvLyB0aGlzLmFraXRhREFPLnZhbHVlID0gYWtpdGFEQU8KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czozOAogICAgLy8gdXBkYXRlQWtpdGFEQU8oYWtpdGFEQU86IEFwcGxpY2F0aW9uKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo6UG9sbC5jcmVhdGVWb3RlKHZvdGVzOiBieXRlcykgLT4gYnl0ZXM6CmNyZWF0ZVZvdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjk2CiAgICAvLyBwcml2YXRlIGNyZWF0ZVZvdGUodm90ZXM6IHVpbnQ2NFtdKTogdm9pZCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo5NwogICAgLy8gbGV0IGltcGFjdDogdWludDY0ID0gMQogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6OTgKICAgIC8vIGlmICh0aGlzLnR5cGUudmFsdWUgPT09IFNpbmdsZUNob2ljZUltcGFjdCB8fCB0aGlzLnR5cGUudmFsdWUgPT09IE11bHRpcGxlQ2hvaWNlSW1wYWN0KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdHlwZSA9IEdsb2JhbFN0YXRlPFVpbnQ4Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5VHlwZSB9KQogICAgYnl0ZWMgNiAvLyAidHlwZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6OTgKICAgIC8vIGlmICh0aGlzLnR5cGUudmFsdWUgPT09IFNpbmdsZUNob2ljZUltcGFjdCB8fCB0aGlzLnR5cGUudmFsdWUgPT09IE11bHRpcGxlQ2hvaWNlSW1wYWN0KSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcHVzaGJ5dGVzIDB4MWUKICAgID09CiAgICBibnogY3JlYXRlVm90ZV9pZl9ib2R5QDIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0eXBlID0gR2xvYmFsU3RhdGU8VWludDg+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlUeXBlIH0pCiAgICBieXRlYyA2IC8vICJ0eXBlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo5OAogICAgLy8gaWYgKHRoaXMudHlwZS52YWx1ZSA9PT0gU2luZ2xlQ2hvaWNlSW1wYWN0IHx8IHRoaXMudHlwZS52YWx1ZSA9PT0gTXVsdGlwbGVDaG9pY2VJbXBhY3QpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBwdXNoYnl0ZXMgMHgyOAogICAgPT0KICAgIGJ6IGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUAzCgpjcmVhdGVWb3RlX2lmX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIGltcGFjdCA9IGdldFVzZXJJbXBhY3QodGhpcy5ha2l0YURBTy52YWx1ZSwgVHhuLnNlbmRlcikKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyOQogICAgLy8gYWtpdGFEQU8gPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFEQU8gfSkKICAgIGJ5dGVjIDUgLy8gImFraXRhX2RhbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIGltcGFjdCA9IGdldFVzZXJJbXBhY3QodGhpcy5ha2l0YURBTy52YWx1ZSwgVHhuLnNlbmRlcikKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjEzNi0xMzkKICAgIC8vIHJldHVybiBhYmlDYWxsPHR5cGVvZiBBa2l0YVNvY2lhbEltcGFjdC5wcm90b3R5cGUuZ2V0VXNlckltcGFjdD4oewogICAgLy8gICBhcHBJZDogZ2V0QWtpdGFTb2NpYWxBcHBMaXN0KGFraXRhREFPKS5pbXBhY3QsCiAgICAvLyAgIGFyZ3M6IFthY2NvdW50XQogICAgLy8gfSkucmV0dXJuVmFsdWUKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6NDkKICAgIC8vIGNvbnN0IFthcHBMaXN0Qnl0ZXNdID0gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMoYWtpdGFEQU8sIEJ5dGVzKEFraXRhREFPR2xvYmFsU3RhdGVLZXlzQWtpdGFTb2NpYWxBcHBMaXN0KSkKICAgIHN3YXAKICAgIHB1c2hieXRlcyAic2FsIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czoxMzcKICAgIC8vIGFwcElkOiBnZXRBa2l0YVNvY2lhbEFwcExpc3QoYWtpdGFEQU8pLmltcGFjdCwKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjEzNi0xMzkKICAgIC8vIHJldHVybiBhYmlDYWxsPHR5cGVvZiBBa2l0YVNvY2lhbEltcGFjdC5wcm90b3R5cGUuZ2V0VXNlckltcGFjdD4oewogICAgLy8gICBhcHBJZDogZ2V0QWtpdGFTb2NpYWxBcHBMaXN0KGFraXRhREFPKS5pbXBhY3QsCiAgICAvLyAgIGFyZ3M6IFthY2NvdW50XQogICAgLy8gfSkucmV0dXJuVmFsdWUKICAgIHB1c2hieXRlcyAweGQ1NzRiYjEwIC8vIG1ldGhvZCAiZ2V0VXNlckltcGFjdChhZGRyZXNzKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWMgMTIgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZnJhbWVfYnVyeSA3CgpjcmVhdGVWb3RlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBpZiAodGhpcy50eXBlLnZhbHVlID09PSBTaW5nbGVDaG9pY2UgfHwgdGhpcy50eXBlLnZhbHVlID09PSBTaW5nbGVDaG9pY2VJbXBhY3QpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0eXBlID0gR2xvYmFsU3RhdGU8VWludDg+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlUeXBlIH0pCiAgICBieXRlYyA2IC8vICJ0eXBlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIGlmICh0aGlzLnR5cGUudmFsdWUgPT09IFNpbmdsZUNob2ljZSB8fCB0aGlzLnR5cGUudmFsdWUgPT09IFNpbmdsZUNob2ljZUltcGFjdCkgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hieXRlcyAweDBhCiAgICA9PQogICAgYm56IGNyZWF0ZVZvdGVfaWZfYm9keUA1CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdHlwZSA9IEdsb2JhbFN0YXRlPFVpbnQ4Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5VHlwZSB9KQogICAgYnl0ZWMgNiAvLyAidHlwZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBpZiAodGhpcy50eXBlLnZhbHVlID09PSBTaW5nbGVDaG9pY2UgfHwgdGhpcy50eXBlLnZhbHVlID09PSBTaW5nbGVDaG9pY2VJbXBhY3QpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBwdXNoYnl0ZXMgMHgxZQogICAgPT0KICAgIGJ6IGNyZWF0ZVZvdGVfZWxzZV9ib2R5QDIwCgpjcmVhdGVWb3RlX2lmX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyBhc3NlcnQodm90ZXMubGVuZ3RoID09PSAxLCBFUlJfSU5WQUxJRF9WT1RFX0NPVU5UKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIEludmFsaWQgbnVtYmVyIG9mIHZvdGUgYXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIGFzc2VydCh2b3Rlc1swXSA8PSB0aGlzLm9wdGlvbkNvdW50LnZhbHVlIC0gMSwgRVJSX0lOVkFMSURfVk9URV9PUFRJT04pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBvcHRpb25Db3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleU9wdGlvbkNvdW50IH0pCiAgICBieXRlYyAxMCAvLyAib3B0aW9uX2NvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIGFzc2VydCh2b3Rlc1swXSA8PSB0aGlzLm9wdGlvbkNvdW50LnZhbHVlIC0gMSwgRVJSX0lOVkFMSURfVk9URV9PUFRJT04pCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICA+PQogICAgYXNzZXJ0IC8vIEludmFsaWQgdm90ZSBvcHRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyBpZiAodm90ZXNbMF0gPT09IDApIHsKICAgIGJueiBjcmVhdGVWb3RlX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEwNwogICAgLy8gdGhpcy52b3Rlc09uZS52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB2b3Rlc09uZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNPbmUgfSkKICAgIGJ5dGVjXzAgLy8gInZvdGVzX29uZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyB0aGlzLnZvdGVzT25lLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB2b3Rlc09uZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNPbmUgfSkKICAgIGJ5dGVjXzAgLy8gInZvdGVzX29uZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyB0aGlzLnZvdGVzT25lLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCmNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUA0MToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnZvdGVzKFR4bi5zZW5kZXIpLmNyZWF0ZSgpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gdGhpcy5ib3hDb3VudC52YWx1ZSArPSAxCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gYm94Q291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlCb3hDb3VudCB9KQogICAgYnl0ZWMgNyAvLyAiYm94X2NvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIHRoaXMuYm94Q291bnQudmFsdWUgKz0gMQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBib3hDb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleUJveENvdW50IH0pCiAgICBieXRlYyA3IC8vICJib3hfY291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gdGhpcy5ib3hDb3VudC52YWx1ZSArPSAxCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKY3JlYXRlVm90ZV9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyB9IGVsc2UgaWYgKHZvdGVzWzBdID09PSAxKSB7CiAgICBmcmFtZV9kaWcgNQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBjcmVhdGVWb3RlX2Vsc2VfYm9keUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEwOQogICAgLy8gdGhpcy52b3Rlc1R3by52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB2b3Rlc1R3byA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUd28gfSkKICAgIGJ5dGVjXzEgLy8gInZvdGVzX3R3byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyB0aGlzLnZvdGVzVHdvLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB2b3Rlc1R3byA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUd28gfSkKICAgIGJ5dGVjXzEgLy8gInZvdGVzX3R3byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyB0aGlzLnZvdGVzVHdvLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgY3JlYXRlVm90ZV9hZnRlcl9pZl9lbHNlQDQxCgpjcmVhdGVWb3RlX2Vsc2VfYm9keUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTAKICAgIC8vIH0gZWxzZSBpZiAodm90ZXNbMF0gPT09IDIpIHsKICAgIGZyYW1lX2RpZyA1CiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGJ6IGNyZWF0ZVZvdGVfZWxzZV9ib2R5QDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gdGhpcy52b3Rlc1RocmVlLnZhbHVlICs9IGltcGFjdAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHZvdGVzVGhyZWUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzVGhyZWUgfSkKICAgIGJ5dGVjXzIgLy8gInZvdGVzX3RocmVlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIHRoaXMudm90ZXNUaHJlZS52YWx1ZSArPSBpbXBhY3QKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgNwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gdm90ZXNUaHJlZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUaHJlZSB9KQogICAgYnl0ZWNfMiAvLyAidm90ZXNfdGhyZWUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gdGhpcy52b3Rlc1RocmVlLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgY3JlYXRlVm90ZV9hZnRlcl9pZl9lbHNlQDQxCgpjcmVhdGVWb3RlX2Vsc2VfYm9keUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTEyCiAgICAvLyB9IGVsc2UgaWYgKHZvdGVzWzBdID09PSAzKSB7CiAgICBmcmFtZV9kaWcgNQogICAgcHVzaGludCAzIC8vIDMKICAgID09CiAgICBieiBjcmVhdGVWb3RlX2Vsc2VfYm9keUAxMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIHRoaXMudm90ZXNGb3VyLnZhbHVlICs9IGltcGFjdAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIHZvdGVzRm91ciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNGb3VyIH0pCiAgICBieXRlY18zIC8vICJ2b3Rlc19mb3VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIHRoaXMudm90ZXNGb3VyLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg2CiAgICAvLyB2b3Rlc0ZvdXIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzRm91ciB9KQogICAgYnl0ZWNfMyAvLyAidm90ZXNfZm91ciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyB0aGlzLnZvdGVzRm91ci52YWx1ZSArPSBpbXBhY3QKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUA0MQoKY3JlYXRlVm90ZV9lbHNlX2JvZHlAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gfSBlbHNlIGlmICh2b3Rlc1swXSA9PT0gNCkgewogICAgZnJhbWVfZGlnIDUKICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYnogY3JlYXRlVm90ZV9hZnRlcl9pZl9lbHNlQDQxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gdGhpcy52b3Rlc0ZpdmUudmFsdWUgKz0gaW1wYWN0CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gdm90ZXNGaXZlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlWb3Rlc0ZpdmUgfSkKICAgIGJ5dGVjIDQgLy8gInZvdGVzX2ZpdmUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gdGhpcy52b3Rlc0ZpdmUudmFsdWUgKz0gaW1wYWN0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDcKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIHZvdGVzRml2ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNGaXZlIH0pCiAgICBieXRlYyA0IC8vICJ2b3Rlc19maXZlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTUKICAgIC8vIHRoaXMudm90ZXNGaXZlLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgY3JlYXRlVm90ZV9hZnRlcl9pZl9lbHNlQDQxCgpjcmVhdGVWb3RlX2Vsc2VfYm9keUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQodm90ZXMubGVuZ3RoIDw9IHRoaXMubWF4U2VsZWN0ZWQudmFsdWUsIEVSUl9JTlZBTElEX1ZPVEVfQ09VTlQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBtYXhTZWxlY3RlZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleU1heFNlbGVjdGVkIH0pCiAgICBieXRlYyAxMSAvLyAibWF4X3NlbGVjdGVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydCh2b3Rlcy5sZW5ndGggPD0gdGhpcy5tYXhTZWxlY3RlZC52YWx1ZSwgRVJSX0lOVkFMSURfVk9URV9DT1VOVCkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8PQogICAgYXNzZXJ0IC8vIEludmFsaWQgbnVtYmVyIG9mIHZvdGUgYXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCB2b3Rlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMgoKY3JlYXRlVm90ZV93aGlsZV90b3BAMjE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyMAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IHZvdGVzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUA0MQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjEKICAgIC8vIGFzc2VydCh2b3Rlc1tpXSA8PSB0aGlzLm9wdGlvbkNvdW50LnZhbHVlIC0gMSwgRVJSX0lOVkFMSURfVk9URV9PUFRJT04pCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIG9wdGlvbkNvdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5T3B0aW9uQ291bnQgfSkKICAgIGJ5dGVjIDEwIC8vICJvcHRpb25fY291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gYXNzZXJ0KHZvdGVzW2ldIDw9IHRoaXMub3B0aW9uQ291bnQudmFsdWUgLSAxLCBFUlJfSU5WQUxJRF9WT1RFX09QVElPTikKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgPD0KICAgIGFzc2VydCAvLyBJbnZhbGlkIHZvdGUgb3B0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gZm9yIChsZXQgajogdWludDY0ID0gaSArIDE7IGogPCB2b3Rlcy5sZW5ndGg7IGogKz0gMSkgewogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICBmcmFtZV9idXJ5IDQKCmNyZWF0ZVZvdGVfd2hpbGVfdG9wQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGZvciAobGV0IGo6IHVpbnQ2NCA9IGkgKyAxOyBqIDwgdm90ZXMubGVuZ3RoOyBqICs9IDEpIHsKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogY3JlYXRlVm90ZV9hZnRlcl93aGlsZUAyNQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIGFzc2VydCh2b3Rlc1tpXSAhPT0gdm90ZXNbal0sIEVSUl9JTlZBTElEX1ZPVEVfT1BUSU9OKQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfZGlnIDYKICAgICE9CiAgICBhc3NlcnQgLy8gSW52YWxpZCB2b3RlIG9wdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGZvciAobGV0IGo6IHVpbnQ2NCA9IGkgKyAxOyBqIDwgdm90ZXMubGVuZ3RoOyBqICs9IDEpIHsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgY3JlYXRlVm90ZV93aGlsZV90b3BAMjMKCmNyZWF0ZVZvdGVfYWZ0ZXJfd2hpbGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyNgogICAgLy8gaWYgKHZvdGVzW2ldID09PSAwKSB7CiAgICBmcmFtZV9kaWcgNgogICAgYm56IGNyZWF0ZVZvdGVfZWxzZV9ib2R5QDI3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gdGhpcy52b3Rlc09uZS52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB2b3Rlc09uZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNPbmUgfSkKICAgIGJ5dGVjXzAgLy8gInZvdGVzX29uZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyB0aGlzLnZvdGVzT25lLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB2b3Rlc09uZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNPbmUgfSkKICAgIGJ5dGVjXzAgLy8gInZvdGVzX29uZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyB0aGlzLnZvdGVzT25lLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCmNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUAzOToKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9idXJ5IDIKICAgIGIgY3JlYXRlVm90ZV93aGlsZV90b3BAMjEKCmNyZWF0ZVZvdGVfZWxzZV9ib2R5QDI3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIH0gZWxzZSBpZiAodm90ZXNbaV0gPT09IDEpIHsKICAgIGZyYW1lX2RpZyA2CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGJ6IGNyZWF0ZVZvdGVfZWxzZV9ib2R5QDI5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gdGhpcy52b3Rlc1R3by52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB2b3Rlc1R3byA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUd28gfSkKICAgIGJ5dGVjXzEgLy8gInZvdGVzX3R3byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyB0aGlzLnZvdGVzVHdvLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB2b3Rlc1R3byA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUd28gfSkKICAgIGJ5dGVjXzEgLy8gInZvdGVzX3R3byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyB0aGlzLnZvdGVzVHdvLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgY3JlYXRlVm90ZV9hZnRlcl9pZl9lbHNlQDM5CgpjcmVhdGVWb3RlX2Vsc2VfYm9keUAyOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTMwCiAgICAvLyB9IGVsc2UgaWYgKHZvdGVzW2ldID09PSAyKSB7CiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBieiBjcmVhdGVWb3RlX2Vsc2VfYm9keUAzMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMzEKICAgIC8vIHRoaXMudm90ZXNUaHJlZS52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyB2b3Rlc1RocmVlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlWb3Rlc1RocmVlIH0pCiAgICBieXRlY18yIC8vICJ2b3Rlc190aHJlZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTMxCiAgICAvLyB0aGlzLnZvdGVzVGhyZWUudmFsdWUgKz0gaW1wYWN0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDcKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHZvdGVzVGhyZWUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzVGhyZWUgfSkKICAgIGJ5dGVjXzIgLy8gInZvdGVzX3RocmVlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMzEKICAgIC8vIHRoaXMudm90ZXNUaHJlZS52YWx1ZSArPSBpbXBhY3QKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUAzOQoKY3JlYXRlVm90ZV9lbHNlX2JvZHlAMzE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gfSBlbHNlIGlmICh2b3Rlc1tpXSA9PT0gMykgewogICAgZnJhbWVfZGlnIDYKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA9PQogICAgYnogY3JlYXRlVm90ZV9lbHNlX2JvZHlAMzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTMzCiAgICAvLyB0aGlzLnZvdGVzRm91ci52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg2CiAgICAvLyB2b3Rlc0ZvdXIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzRm91ciB9KQogICAgYnl0ZWNfMyAvLyAidm90ZXNfZm91ciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTMzCiAgICAvLyB0aGlzLnZvdGVzRm91ci52YWx1ZSArPSBpbXBhY3QKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgNwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo4NgogICAgLy8gdm90ZXNGb3VyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlWb3Rlc0ZvdXIgfSkKICAgIGJ5dGVjXzMgLy8gInZvdGVzX2ZvdXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy52b3Rlc0ZvdXIudmFsdWUgKz0gaW1wYWN0CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBjcmVhdGVWb3RlX2FmdGVyX2lmX2Vsc2VAMzkKCmNyZWF0ZVZvdGVfZWxzZV9ib2R5QDMzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMzQKICAgIC8vIH0gZWxzZSBpZiAodm90ZXNbaV0gPT09IDQpIHsKICAgIGZyYW1lX2RpZyA2CiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIGJ6IGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUAzOQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIHRoaXMudm90ZXNGaXZlLnZhbHVlICs9IGltcGFjdAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIHZvdGVzRml2ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNGaXZlIH0pCiAgICBieXRlYyA0IC8vICJ2b3Rlc19maXZlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIHRoaXMudm90ZXNGaXZlLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyB2b3Rlc0ZpdmUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzRml2ZSB9KQogICAgYnl0ZWMgNCAvLyAidm90ZXNfZml2ZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTM1CiAgICAvLyB0aGlzLnZvdGVzRml2ZS52YWx1ZSArPSBpbXBhY3QKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUAzOQo=\",\"clear\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==\"},\"byteCode\":{\"approval\":\"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\",\"clear\":\"C4EBQw==\"},\"events\":[],\"templateVariables\":{}} as unknown as Arc56Contract\n\n/**\n * A state record containing binary data\n */\nexport interface BinaryState {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array | undefined\n /**\n * Gets the state value as a string\n */\n asString(): string | undefined\n}\n\nclass BinaryStateValue implements BinaryState {\n constructor(private value: Uint8Array | undefined) {}\n\n asByteArray(): Uint8Array | undefined {\n return this.value\n }\n\n asString(): string | undefined {\n return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined\n }\n}\n\n/**\n * Expands types for IntelliSense so they are more human readable\n * See https://stackoverflow.com/a/69288824\n */\nexport type Expand<T> = T extends (...args: infer A) => infer R\n ? (...args: Expand<A>) => Expand<R>\n : T extends infer O\n ? { [K in keyof O]: O[K] }\n : never\n\n\n/**\n * The argument types for the Poll contract\n */\nexport type PollArgs = {\n /**\n * The object representation of the arguments for each method\n */\n obj: {\n 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void': {\n akitaDao: bigint | number\n type: bigint | number\n endTime: bigint | number\n maxSelected: bigint | number\n question: string\n options: string[]\n gateId: bigint | number\n }\n 'deleteBoxes(address[])void': {\n addresses: string[]\n }\n 'gatedVote(pay,appl,uint64[])void': {\n mbrPayment?: AppMethodCallTransactionArgument\n gateTxn: AppMethodCallTransactionArgument\n votes: bigint[] | number[]\n }\n 'vote(pay,uint64[])void': {\n mbrPayment: AppMethodCallTransactionArgument\n votes: bigint[] | number[]\n }\n 'hasVoted(address)bool': {\n user: string\n }\n 'updateAkitaDAO(uint64)void': {\n akitaDao: bigint | number\n }\n 'opUp()void': Record<string, never>\n }\n /**\n * The tuple representation of the arguments for each method\n */\n tuple: {\n 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void': [akitaDao: bigint | number, type: bigint | number, endTime: bigint | number, maxSelected: bigint | number, question: string, options: string[], gateId: bigint | number]\n 'deleteBoxes(address[])void': [addresses: string[]]\n 'gatedVote(pay,appl,uint64[])void': [mbrPayment: AppMethodCallTransactionArgument | undefined, gateTxn: AppMethodCallTransactionArgument, votes: bigint[] | number[]]\n 'vote(pay,uint64[])void': [mbrPayment: AppMethodCallTransactionArgument, votes: bigint[] | number[]]\n 'hasVoted(address)bool': [user: string]\n 'updateAkitaDAO(uint64)void': [akitaDao: bigint | number]\n 'opUp()void': []\n }\n}\n\n/**\n * The return type for each method\n */\nexport type PollReturns = {\n 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void': void\n 'deleteBoxes(address[])void': void\n 'gatedVote(pay,appl,uint64[])void': void\n 'vote(pay,uint64[])void': void\n 'hasVoted(address)bool': boolean\n 'updateAkitaDAO(uint64)void': void\n 'opUp()void': void\n}\n\n/**\n * Defines the types of available calls and state of the Poll smart contract.\n */\nexport type PollTypes = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods:\n & Record<'create(uint64,uint8,uint64,uint64,string,string[],uint64)void' | 'create', {\n argsObj: PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']\n argsTuple: PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']\n returns: PollReturns['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']\n }>\n & Record<'deleteBoxes(address[])void' | 'deleteBoxes', {\n argsObj: PollArgs['obj']['deleteBoxes(address[])void']\n argsTuple: PollArgs['tuple']['deleteBoxes(address[])void']\n returns: PollReturns['deleteBoxes(address[])void']\n }>\n & Record<'gatedVote(pay,appl,uint64[])void' | 'gatedVote', {\n argsObj: PollArgs['obj']['gatedVote(pay,appl,uint64[])void']\n argsTuple: PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']\n returns: PollReturns['gatedVote(pay,appl,uint64[])void']\n }>\n & Record<'vote(pay,uint64[])void' | 'vote', {\n argsObj: PollArgs['obj']['vote(pay,uint64[])void']\n argsTuple: PollArgs['tuple']['vote(pay,uint64[])void']\n returns: PollReturns['vote(pay,uint64[])void']\n }>\n & Record<'hasVoted(address)bool' | 'hasVoted', {\n argsObj: PollArgs['obj']['hasVoted(address)bool']\n argsTuple: PollArgs['tuple']['hasVoted(address)bool']\n returns: PollReturns['hasVoted(address)bool']\n }>\n & Record<'updateAkitaDAO(uint64)void' | 'updateAkitaDAO', {\n argsObj: PollArgs['obj']['updateAkitaDAO(uint64)void']\n argsTuple: PollArgs['tuple']['updateAkitaDAO(uint64)void']\n returns: PollReturns['updateAkitaDAO(uint64)void']\n }>\n & Record<'opUp()void' | 'opUp', {\n argsObj: PollArgs['obj']['opUp()void']\n argsTuple: PollArgs['tuple']['opUp()void']\n returns: PollReturns['opUp()void']\n }>\n /**\n * Defines the shape of the state of the application.\n */\n state: {\n global: {\n keys: {\n /**\n * The type of poll: SingleChoice, MultipleChoice, SingleChoiceImpact or MultipleChoiceImpact\n */\n type: number\n /**\n * the gate id to be used for filtering who can interact with this poll\n */\n gateId: bigint\n /**\n * the time the poll ends as a unix timestamp\n */\n endTime: bigint\n /**\n * the number of options in the poll\n */\n optionCount: bigint\n /**\n * the maximum number of selections in a multiple choice poll\n */\n maxSelected: bigint\n /**\n * the number of boxes created during the poll\n */\n boxCount: bigint\n /**\n * the question being asked\n */\n question: string\n /**\n * the options and vote counts of the poll\n */\n optionOne: string\n optionTwo: string\n optionThree: string\n optionFour: string\n optionFive: string\n /**\n * the number of votes for each option\n */\n votesOne: bigint\n votesTwo: bigint\n votesThree: bigint\n votesFour: bigint\n votesFive: bigint\n /**\n * the current version of the contract\n */\n version: string\n /**\n * the app ID of the Akita DAO\n */\n akitaDao: bigint\n }\n maps: {}\n }\n box: {\n keys: {}\n maps: {\n /**\n * A map of addresses to empty bytes to track who has voted\n */\n votes: Map<string, Uint8Array>\n }\n }\n }\n}\n\n/**\n * Defines the possible abi call signatures.\n */\nexport type PollSignatures = keyof PollTypes['methods']\n/**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\nexport type PollNonVoidMethodSignatures = keyof PollTypes['methods'] extends infer T ? T extends keyof PollTypes['methods'] ? MethodReturn<T> extends void ? never : T : never : never\n/**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\nexport type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n>\n/**\n * Maps a method signature from the Poll smart contract to the method's arguments in either tuple or struct form\n */\nexport type MethodArgs<TSignature extends PollSignatures> = PollTypes['methods'][TSignature]['argsObj' | 'argsTuple']\n/**\n * Maps a method signature from the Poll smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends PollSignatures> = PollTypes['methods'][TSignature]['returns']\n\n/**\n * Defines the shape of the keyed global state of the application.\n */\nexport type GlobalKeysState = PollTypes['state']['global']['keys']\n\n/**\n * Defines the shape of the keyed box state of the application.\n */\nexport type BoxKeysState = PollTypes['state']['box']['keys']\n\n\n/**\n * Defines supported create method params for this smart contract\n */\nexport type PollCreateCallParams =\n | Expand<CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & {method: 'create'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n | Expand<CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & {method: 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n/**\n * Defines arguments required for the deploy method.\n */\nexport type PollDeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {\n /**\n * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n createParams?: PollCreateCallParams\n}>\n\n\n/**\n * Exposes methods for constructing `AppClient` params objects for ABI calls to the Poll smart contract\n */\nexport abstract class PollParamsFactory {\n /**\n * Gets available create ABI call param factories\n */\n static get create() {\n return {\n _resolveByMethod<TParams extends PollCreateCallParams & {method: string}>(params: TParams) {\n switch(params.method) {\n case 'create':\n case 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void':\n return PollParamsFactory.create.create(params)\n }\n throw new Error(`Unknown ' + verb + ' method`)\n },\n\n /**\n * Constructs create ABI call params for the Poll smart contract using the create(uint64,uint8,uint64,uint64,string,string[],uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n create(params: CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC}): AppClientMethodCallParams & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC} {\n return {\n ...params,\n method: 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.akitaDao, params.args.type, params.args.endTime, params.args.maxSelected, params.args.question, params.args.options, params.args.gateId],\n }\n },\n }\n }\n\n /**\n * Constructs a no op call for the deleteBoxes(address[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static deleteBoxes(params: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'deleteBoxes(address[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.addresses],\n }\n }\n /**\n * Constructs a no op call for the gatedVote(pay,appl,uint64[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static gatedVote(params: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'gatedVote(pay,appl,uint64[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.gateTxn, params.args.votes],\n }\n }\n /**\n * Constructs a no op call for the vote(pay,uint64[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static vote(params: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'vote(pay,uint64[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.votes],\n }\n }\n /**\n * Constructs a no op call for the hasVoted(address)bool ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static hasVoted(params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'hasVoted(address)bool' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.user],\n }\n }\n /**\n * Constructs a no op call for the updateAkitaDAO(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static updateAkitaDao(params: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'updateAkitaDAO(uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.akitaDao],\n }\n }\n /**\n * Constructs a no op call for the opUp()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static opUp(params: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'opUp()void' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n}\n\n/**\n * A factory to create and deploy one or more instance of the Poll smart contract and to create one or more app clients to interact with those (or other) app instances\n */\nexport class PollFactory {\n /**\n * The underlying `AppFactory` for when you want to have more flexibility\n */\n public readonly appFactory: _AppFactory\n\n /**\n * Creates a new instance of `PollFactory`\n *\n * @param params The parameters to initialise the app factory with\n */\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n })\n }\n \n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName\n }\n \n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC\n }\n \n /** A reference to the underlying `AlgorandClient` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand\n }\n \n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new PollClient(this.appFactory.getAppClientById(params))\n }\n \n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public async getAppClientByCreatorAndName(\n params: AppFactoryResolveAppClientByCreatorAndNameParams,\n ) {\n return new PollClient(await this.appFactory.getAppClientByCreatorAndName(params))\n }\n\n /**\n * Idempotently deploys the Poll smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public async deploy(params: PollDeployParams = {}) {\n const result = await this.appFactory.deploy({\n ...params,\n createParams: params.createParams?.method ? PollParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (PollCreateCallParams & { args: Uint8Array[] }) : undefined,\n })\n return { result: result.result, appClient: new PollClient(result.appClient) }\n }\n\n /**\n * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Poll smart contract using the create(uint64,uint8,uint64,uint64,string,string[],uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create params\n */\n create: (params: CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.params.create(PollParamsFactory.create.create(params))\n },\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Poll smart contract using the create(uint64,uint8,uint64,uint64,string,string[],uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create transaction\n */\n create: (params: CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.createTransaction.create(PollParamsFactory.create.create(params))\n },\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Poll smart contract using an ABI method call using the create(uint64,uint8,uint64,uint64,string,string[],uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create result\n */\n create: async (params: CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & AppClientCompilationParams & CreateSchema & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appFactory.send.create(PollParamsFactory.create.create(params))\n return { result: { ...result.result, return: result.result.return as unknown as (undefined | PollReturns['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']) }, appClient: new PollClient(result.appClient) }\n },\n },\n\n }\n\n}\n/**\n * A client to make calls to the Poll smart contract\n */\nexport class PollClient {\n /**\n * The underlying `AppClient` for when you want to have more flexibility\n */\n public readonly appClient: _AppClient\n\n /**\n * Creates a new instance of `PollClient`\n *\n * @param appClient An `AppClient` instance which has been created with the Poll app spec\n */\n constructor(appClient: _AppClient)\n /**\n * Creates a new instance of `PollClient`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends PollNonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {\n return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined\n }\n\n /**\n * Returns a new `PollClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<PollClient> {\n return new PollClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n \n /**\n * Returns an `PollClient` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<PollClient> {\n return new PollClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n \n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n \n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n \n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n \n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n \n /** A reference to the underlying `AlgorandClient` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand\n }\n\n /**\n * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Makes a clear_state call to an existing instance of the Poll smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.params.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Poll smart contract using the `deleteBoxes(address[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n deleteBoxes: (params: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollParamsFactory.deleteBoxes(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `gatedVote(pay,appl,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n gatedVote: (params: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollParamsFactory.gatedVote(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `vote(pay,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n vote: (params: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollParamsFactory.vote(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `hasVoted(address)bool` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n hasVoted: (params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollParamsFactory.hasVoted(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n updateAkitaDao: (params: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n opUp: (params: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(PollParamsFactory.opUp(params))\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Makes a clear_state call to an existing instance of the Poll smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.createTransaction.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Poll smart contract using the `deleteBoxes(address[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n deleteBoxes: (params: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.deleteBoxes(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `gatedVote(pay,appl,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n gatedVote: (params: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.gatedVote(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `vote(pay,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n vote: (params: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.vote(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `hasVoted(address)bool` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n hasVoted: (params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.hasVoted(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n updateAkitaDao: (params: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n opUp: (params: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.opUp(params))\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Makes a clear_state call to an existing instance of the Poll smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams & SendParams>) => {\n return this.appClient.send.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Poll smart contract using the `deleteBoxes(address[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n deleteBoxes: async (params: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollParamsFactory.deleteBoxes(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['deleteBoxes(address[])void'])}\n },\n\n /**\n * Makes a call to the Poll smart contract using the `gatedVote(pay,appl,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n gatedVote: async (params: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollParamsFactory.gatedVote(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['gatedVote(pay,appl,uint64[])void'])}\n },\n\n /**\n * Makes a call to the Poll smart contract using the `vote(pay,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n vote: async (params: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollParamsFactory.vote(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['vote(pay,uint64[])void'])}\n },\n\n /**\n * Makes a call to the Poll smart contract using the `hasVoted(address)bool` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n hasVoted: async (params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollParamsFactory.hasVoted(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['hasVoted(address)bool'])}\n },\n\n /**\n * Makes a call to the Poll smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n updateAkitaDao: async (params: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollParamsFactory.updateAkitaDao(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['updateAkitaDAO(uint64)void'])}\n },\n\n /**\n * Makes a call to the Poll smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n opUp: async (params: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(PollParamsFactory.opUp(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['opUp()void'])}\n },\n\n }\n\n /**\n * Clone this app client with different params\n *\n * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.\n * @returns A new app client with the altered params\n */\n public clone(params: CloneAppClientParams) {\n return new PollClient(this.appClient.clone(params))\n }\n\n /**\n * Makes a readonly (simulated) call to the Poll smart contract using the `hasVoted(address)bool` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async hasVoted(params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']>) {\n const result = await this.appClient.send.call(PollParamsFactory.hasVoted(params))\n return result.return as unknown as PollReturns['hasVoted(address)bool']\n }\n\n /**\n * Methods to access state for the current Poll app\n */\n state = {\n /**\n * Methods to access global state for the current Poll app\n */\n global: {\n /**\n * Get all current keyed values from global state\n */\n getAll: async (): Promise<Partial<Expand<GlobalKeysState>>> => {\n const result = await this.appClient.state.global.getAll()\n return {\n type: result.type,\n gateId: result.gateID,\n endTime: result.endTime,\n optionCount: result.optionCount,\n maxSelected: result.maxSelected,\n boxCount: result.boxCount,\n question: result.question,\n optionOne: result.optionOne,\n optionTwo: result.optionTwo,\n optionThree: result.optionThree,\n optionFour: result.optionFour,\n optionFive: result.optionFive,\n votesOne: result.votesOne,\n votesTwo: result.votesTwo,\n votesThree: result.votesThree,\n votesFour: result.votesFour,\n votesFive: result.votesFive,\n version: result.version,\n akitaDao: result.akitaDAO,\n }\n },\n /**\n * Get the current value of the type key in global state\n */\n type: async (): Promise<number | undefined> => { return (await this.appClient.state.global.getValue(\"type\")) as number | undefined },\n /**\n * Get the current value of the gateID key in global state\n */\n gateId: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"gateID\")) as bigint | undefined },\n /**\n * Get the current value of the endTime key in global state\n */\n endTime: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"endTime\")) as bigint | undefined },\n /**\n * Get the current value of the optionCount key in global state\n */\n optionCount: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"optionCount\")) as bigint | undefined },\n /**\n * Get the current value of the maxSelected key in global state\n */\n maxSelected: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"maxSelected\")) as bigint | undefined },\n /**\n * Get the current value of the boxCount key in global state\n */\n boxCount: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"boxCount\")) as bigint | undefined },\n /**\n * Get the current value of the question key in global state\n */\n question: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"question\")) as string | undefined },\n /**\n * Get the current value of the optionOne key in global state\n */\n optionOne: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"optionOne\")) as string | undefined },\n /**\n * Get the current value of the optionTwo key in global state\n */\n optionTwo: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"optionTwo\")) as string | undefined },\n /**\n * Get the current value of the optionThree key in global state\n */\n optionThree: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"optionThree\")) as string | undefined },\n /**\n * Get the current value of the optionFour key in global state\n */\n optionFour: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"optionFour\")) as string | undefined },\n /**\n * Get the current value of the optionFive key in global state\n */\n optionFive: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"optionFive\")) as string | undefined },\n /**\n * Get the current value of the votesOne key in global state\n */\n votesOne: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"votesOne\")) as bigint | undefined },\n /**\n * Get the current value of the votesTwo key in global state\n */\n votesTwo: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"votesTwo\")) as bigint | undefined },\n /**\n * Get the current value of the votesThree key in global state\n */\n votesThree: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"votesThree\")) as bigint | undefined },\n /**\n * Get the current value of the votesFour key in global state\n */\n votesFour: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"votesFour\")) as bigint | undefined },\n /**\n * Get the current value of the votesFive key in global state\n */\n votesFive: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"votesFive\")) as bigint | undefined },\n /**\n * Get the current value of the version key in global state\n */\n version: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"version\")) as string | undefined },\n /**\n * Get the current value of the akitaDAO key in global state\n */\n akitaDao: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"akitaDAO\")) as bigint | undefined },\n },\n /**\n * Methods to access box state for the current Poll app\n */\n box: {\n /**\n * Get all current keyed values from box state\n */\n getAll: async (): Promise<Partial<Expand<BoxKeysState>>> => {\n const result = await this.appClient.state.box.getAll()\n return {\n }\n },\n /**\n * Get values from the votes map in box state\n */\n votes: {\n /**\n * Get all current values of the votes map in box state\n */\n getMap: async (): Promise<Map<string, Uint8Array>> => { return (await this.appClient.state.box.getMap(\"votes\")) as Map<string, Uint8Array> },\n /**\n * Get a current value of the votes map by key from box state\n */\n value: async (key: string): Promise<Uint8Array | undefined> => { return await this.appClient.state.box.getMapValue(\"votes\", key) as Uint8Array | undefined },\n },\n },\n }\n\n public newGroup(): PollComposer {\n const client = this\n const composer = this.algorand.newGroup()\n let promiseChain:Promise<unknown> = Promise.resolve()\n const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []\n return {\n /**\n * Add a deleteBoxes(address[])void method call against the Poll contract\n */\n deleteBoxes(params: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBoxes(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a gatedVote(pay,appl,uint64[])void method call against the Poll contract\n */\n gatedVote(params: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.gatedVote(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a vote(pay,uint64[])void method call against the Poll contract\n */\n vote(params: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.vote(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a hasVoted(address)bool method call against the Poll contract\n */\n hasVoted(params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.hasVoted(params)))\n resultMappers.push((v) => client.decodeReturnValue('hasVoted(address)bool', v))\n return this\n },\n /**\n * Add a updateAkitaDAO(uint64)void method call against the Poll contract\n */\n updateAkitaDao(params: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.updateAkitaDao(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a opUp()void method call against the Poll contract\n */\n opUp(params: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.opUp(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a clear state call to the Poll contract\n */\n clearState(params: AppClientBareCallParams) {\n promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)))\n return this\n },\n addTransaction(txn: Transaction, signer?: TransactionSigner) {\n promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer))\n return this\n },\n async composer() {\n await promiseChain\n return composer\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain\n const result = await (!options ? composer.simulate() : composer.simulate(options))\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n },\n async send(params?: SendParams) {\n await promiseChain\n const result = await composer.send(params)\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n }\n } as unknown as PollComposer\n }\n}\nexport type PollComposer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the deleteBoxes(address[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n deleteBoxes(params?: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']>): PollComposer<[...TReturns, PollReturns['deleteBoxes(address[])void'] | undefined]>\n\n /**\n * Calls the gatedVote(pay,appl,uint64[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n gatedVote(params?: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']>): PollComposer<[...TReturns, PollReturns['gatedVote(pay,appl,uint64[])void'] | undefined]>\n\n /**\n * Calls the vote(pay,uint64[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n vote(params?: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']>): PollComposer<[...TReturns, PollReturns['vote(pay,uint64[])void'] | undefined]>\n\n /**\n * Calls the hasVoted(address)bool ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n hasVoted(params?: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']>): PollComposer<[...TReturns, PollReturns['hasVoted(address)bool'] | undefined]>\n\n /**\n * Calls the updateAkitaDAO(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n updateAkitaDao(params?: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']>): PollComposer<[...TReturns, PollReturns['updateAkitaDAO(uint64)void'] | undefined]>\n\n /**\n * Calls the opUp()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n opUp(params?: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']>): PollComposer<[...TReturns, PollReturns['opUp()void'] | undefined]>\n\n /**\n * Makes a clear_state call to an existing instance of the Poll smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(params?: AppClientBareCallParams): PollComposer<[...TReturns, undefined]>\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn A transaction to add to the transaction group\n * @param signer The optional signer to use when signing this transaction.\n */\n addTransaction(txn: Transaction, signer?: TransactionSigner): PollComposer<TReturns>\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n composer(): Promise<TransactionComposer>\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(): Promise<PollComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: SkipSignaturesSimulateOptions): Promise<PollComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: RawSimulateOptions): Promise<PollComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n /**\n * Sends the transaction group to the network and returns the results\n */\n send(params?: SendParams): Promise<PollComposerResults<TReturns>>\n}\nexport type PollComposerResults<TReturns extends [...any[]]> = Expand<SendAtomicTransactionComposerResults & {\n returns: TReturns\n}>\n\n","import { MaybeSigner } from \"../types\";\nimport {\n PollArgs,\n} from '../generated/PollClient';\nimport { PollFactoryArgs } from '../generated/PollFactoryClient';\nimport { AppCallMethodCall } from \"@algorandfoundation/algokit-utils/types/composer\";\n\n// Factory Types\ntype FactoryContractArgs = PollFactoryArgs[\"obj\"];\n\nexport type NewPollParams = MaybeSigner & Omit<\n FactoryContractArgs['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'],\n 'payment'\n>;\n\n// Individual Poll Types\ntype PollContractArgs = PollArgs[\"obj\"];\n\nexport type VoteParams = MaybeSigner & {\n /** Array of option indices (0-based) to vote for */\n votes: bigint[];\n /** Optional gate transaction for gated polls */\n gateTxn?: AppCallMethodCall;\n};\n\nexport type DeleteBoxesParams = MaybeSigner & PollContractArgs['deleteBoxes(address[])void'];\n\nexport type HasVotedParams = PollContractArgs['hasVoted(address)bool'];\n\nexport type PollState = {\n type: number;\n gateId: bigint;\n endTime: bigint;\n optionCount: bigint;\n maxSelected: bigint;\n boxCount: bigint;\n question: string;\n optionOne: string;\n optionTwo: string;\n optionThree: string;\n optionFour: string;\n optionFive: string;\n votesOne: bigint;\n votesTwo: bigint;\n votesThree: bigint;\n votesFour: bigint;\n votesFive: bigint;\n};\n\n// Poll type constants\nexport enum PollTypeEnum {\n SingleChoice = 10,\n MultipleChoice = 20,\n SingleChoiceImpact = 30,\n MultipleChoiceImpact = 40,\n}\n\n// MBR constant for votes box\nexport const VOTES_MBR = 15_300n;\n\n","import { microAlgo } from \"@algorandfoundation/algokit-utils\";\nimport { BaseSDK } from \"../base\";\nimport { ENV_VAR_NAMES } from \"../config\";\nimport {\n PollFactoryClient,\n PollFactoryFactory,\n PollFactoryArgs,\n} from '../generated/PollFactoryClient';\nimport { MaybeSigner, NewContractSDKParams } from \"../types\";\nimport { PollSDK } from \"./index\";\nimport { NewPollParams } from \"./types\";\n\nexport type PollFactoryContractArgs = PollFactoryArgs[\"obj\"];\n\n/**\n * SDK for interacting with the Poll Factory contract.\n * Used to create new polls.\n */\nexport class PollFactorySDK extends BaseSDK<PollFactoryClient> {\n\n constructor(params: NewContractSDKParams) {\n super({ factory: PollFactoryFactory, ...params }, ENV_VAR_NAMES.POLL_FACTORY_APP_ID);\n }\n\n /**\n * Creates a new poll and returns a PollSDK instance.\n * @returns PollSDK for the newly created poll\n */\n async new({\n sender,\n signer,\n type,\n endTime,\n maxSelected,\n question,\n options,\n gateId,\n }: NewPollParams): Promise<PollSDK> {\n\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // Get the cost for creating a new poll\n const cost = await this.cost();\n\n const payment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(cost),\n receiver: this.client.appAddress,\n });\n\n const { return: appId } = await this.client.send.new({\n ...sendParams,\n args: {\n payment,\n type,\n endTime,\n maxSelected,\n question,\n options,\n gateId,\n },\n });\n\n if (appId === undefined) {\n throw new Error('Failed to create new poll');\n }\n\n return new PollSDK({\n algorand: this.algorand,\n factoryParams: {\n appId,\n defaultSender: sendParams.sender,\n defaultSigner: sendParams.signer,\n },\n });\n }\n\n /**\n * Gets a PollSDK instance for an existing poll.\n * @param appId - The app ID of the poll\n * @returns PollSDK for the specified poll\n */\n get({ appId }: { appId: bigint }): PollSDK {\n return new PollSDK({\n algorand: this.algorand,\n factoryParams: {\n appId,\n defaultSender: this.sendParams.sender,\n defaultSigner: this.sendParams.signer,\n },\n });\n }\n\n /**\n * Gets the cost to create a new poll.\n */\n async cost(): Promise<bigint> {\n return await this.client.newPollCost();\n }\n\n /**\n * Updates the Akita DAO reference.\n */\n async updateAkitaDAO({ sender, signer, akitaDao }: MaybeSigner & PollFactoryContractArgs['updateAkitaDAO(uint64)void']): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.updateAkitaDao({\n ...sendParams,\n args: { akitaDao },\n });\n }\n\n /**\n * Updates the Akita DAO Escrow reference.\n */\n async updateAkitaDAOEscrow({ sender, signer, app }: MaybeSigner & PollFactoryContractArgs['updateAkitaDAOEscrow(uint64)void']): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.updateAkitaDaoEscrow({\n ...sendParams,\n args: { app },\n });\n }\n}\n\n/**\n * Convenience function to create a new poll and return the SDK.\n * Creates a factory SDK, creates the poll, and returns the poll SDK.\n */\nexport async function newPoll({\n factoryParams,\n algorand,\n readerAccount,\n sendParams,\n ...pollParams\n}: NewContractSDKParams & NewPollParams): Promise<PollSDK> {\n const factory = new PollFactorySDK({ factoryParams, algorand, readerAccount, sendParams });\n return await factory.new(pollParams);\n}\n\n","/* eslint-disable */\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^7\n */\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\nimport { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport {\n AppClient as _AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n} from '@algorandfoundation/algokit-utils/types/app-client'\nimport { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\nimport { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n\nexport const APP_SPEC: Arc56Contract = {\"name\":\"PollFactory\",\"structs\":{},\"methods\":[{\"name\":\"create\",\"args\":[{\"type\":\"string\",\"name\":\"version\"},{\"type\":\"string\",\"name\":\"childVersion\"},{\"type\":\"uint64\",\"name\":\"akitaDAO\"},{\"type\":\"uint64\",\"name\":\"akitaDAOEscrow\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[\"NoOp\"],\"call\":[]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"new\",\"args\":[{\"type\":\"pay\",\"name\":\"payment\"},{\"type\":\"uint8\",\"name\":\"type\"},{\"type\":\"uint64\",\"name\":\"endTime\"},{\"type\":\"uint64\",\"name\":\"maxSelected\"},{\"type\":\"string\",\"name\":\"question\"},{\"type\":\"string[]\",\"name\":\"options\"},{\"type\":\"uint64\",\"name\":\"gateID\"}],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"newPollCost\",\"args\":[],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"events\":[],\"recommendations\":{}},{\"name\":\"initBoxedContract\",\"args\":[{\"type\":\"string\",\"name\":\"version\"},{\"type\":\"uint64\",\"name\":\"size\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"loadBoxedContract\",\"args\":[{\"type\":\"uint64\",\"name\":\"offset\"},{\"type\":\"byte[]\",\"name\":\"data\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"deleteBoxedContract\",\"args\":[],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"optIn\",\"args\":[{\"type\":\"pay\",\"name\":\"payment\",\"desc\":\"The payment transaction\"},{\"type\":\"uint64\",\"name\":\"asset\",\"desc\":\"The asset to be opted into\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"desc\":\"optin tells the contract to opt into an asa\",\"events\":[],\"recommendations\":{}},{\"name\":\"optInCost\",\"args\":[{\"type\":\"uint64\",\"name\":\"asset\"}],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"events\":[],\"recommendations\":{}},{\"name\":\"updateAkitaDAOEscrow\",\"args\":[{\"type\":\"uint64\",\"name\":\"app\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"update\",\"args\":[{\"type\":\"string\",\"name\":\"newVersion\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"UpdateApplication\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"updateAkitaDAO\",\"args\":[{\"type\":\"uint64\",\"name\":\"akitaDAO\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"opUp\",\"args\":[],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}}],\"arcs\":[22,28],\"networks\":{},\"state\":{\"schema\":{\"global\":{\"ints\":2,\"bytes\":2},\"local\":{\"ints\":0,\"bytes\":0}},\"keys\":{\"global\":{\"childContractVersion\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"Y2hpbGRfY29udHJhY3RfdmVyc2lvbg==\",\"desc\":\"the current version of the child contract\"},\"akitaDAOEscrow\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"YWtpdGFfZXNjcm93\",\"desc\":\"the app ID for the akita DAO escrow to use\"},\"version\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"dmVyc2lvbg==\",\"desc\":\"the current version of the contract\"},\"akitaDAO\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"YWtpdGFfZGFv\",\"desc\":\"the app ID of the Akita DAO\"}},\"local\":{},\"box\":{\"boxedContract\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMBytes\",\"key\":\"YmM=\"}}},\"maps\":{\"global\":{},\"local\":{},\"box\":{}}},\"bareActions\":{\"create\":[],\"call\":[]},\"sourceInfo\":{\"approval\":{\"sourceInfo\":[{\"pc\":[2237],\"errorMessage\":\"Contract not set\"},{\"pc\":[2460],\"errorMessage\":\"Invalid app upgrade\"},{\"pc\":[2232],\"errorMessage\":\"Invalid call order\"},{\"pc\":[403,2324],\"errorMessage\":\"Invalid payment\"},{\"pc\":[102],\"errorMessage\":\"OnCompletion must be NoOp\"},{\"pc\":[209],\"errorMessage\":\"OnCompletion must be UpdateApplication && can only call when not creating\"},{\"pc\":[2115,2135,2263,2408,2446,2489],\"errorMessage\":\"Only the Akita DAO can call this function\"},{\"pc\":[2038,2133,2261,2298,2365,2406,2442,2487],\"errorMessage\":\"application exists\"},{\"pc\":[408,2127,2255,2291,2295,2358,2362,2400,2435,2481],\"errorMessage\":\"check GlobalState exists\"},{\"pc\":[2164],\"errorMessage\":\"invalid number of bytes for (len+uint8[])\"},{\"pc\":[270,286,373,2085,2426],\"errorMessage\":\"invalid number of bytes for (len+utf8[])\"},{\"pc\":[297,306,352,360,384,2096,2149,2286,2353,2393,2474],\"errorMessage\":\"invalid number of bytes for uint64\"},{\"pc\":[344],\"errorMessage\":\"invalid number of bytes for uint8\"},{\"pc\":[336,2278],\"errorMessage\":\"transaction type is pay\"}],\"pcOffsetMethod\":\"none\"},\"clear\":{\"sourceInfo\":[],\"pcOffsetMethod\":\"none\"}},\"source\":{\"approval\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMiA4MTM1MDAKICAgIGJ5dGVjYmxvY2sgImFraXRhX2RhbyIgImJjIiAid2FsbGV0IiAiYWtpdGFfZXNjcm93IiAweDE1MWY3Yzc1IDB4YzUzYjMyY2MgInZlcnNpb24iICJjaGlsZF9jb250cmFjdF92ZXJzaW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjkKICAgIC8vIGV4cG9ydCBjbGFzcyBQb2xsRmFjdG9yeSBleHRlbmRzIEZhY3RvcnlDb250cmFjdCB7CiAgICBwdXNoYnl0ZXMgMHhlYTkxODBkZCAvLyBtZXRob2QgInVwZGF0ZShzdHJpbmcpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdXBkYXRlX3JvdXRlQDIKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjkKICAgIC8vIGV4cG9ydCBjbGFzcyBQb2xsRmFjdG9yeSBleHRlbmRzIEZhY3RvcnlDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMTYKICAgIHB1c2hieXRlc3MgMHgxMTliYzY5OCAweDgzNjYxNzAzIC8vIG1ldGhvZCAibmV3KHBheSx1aW50OCx1aW50NjQsdWludDY0LHN0cmluZyxzdHJpbmdbXSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJuZXdQb2xsQ29zdCgpdWludDY0IgogICAgYnl0ZWMgNSAvLyBtZXRob2QgImluaXRCb3hlZENvbnRyYWN0KHN0cmluZyx1aW50NjQpdm9pZCIKICAgIHB1c2hieXRlc3MgMHhkY2EyZDg2MiAweGQzNDZiMWE0IDB4Mzk0ZWFlYjIgMHgzM2Y3ODgwOCAweDFlYWQyMGE5IDB4MzNlOTJjOTQgMHg4NTRkZWRlMCAvLyBtZXRob2QgImxvYWRCb3hlZENvbnRyYWN0KHVpbnQ2NCxieXRlW10pdm9pZCIsIG1ldGhvZCAiZGVsZXRlQm94ZWRDb250cmFjdCgpdm9pZCIsIG1ldGhvZCAib3B0SW4ocGF5LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJvcHRJbkNvc3QodWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidXBkYXRlQWtpdGFEQU9Fc2Nyb3codWludDY0KXZvaWQiLCBtZXRob2QgInVwZGF0ZUFraXRhREFPKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJvcFVwKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbmV3IG5ld1BvbGxDb3N0IGluaXRCb3hlZENvbnRyYWN0IGxvYWRCb3hlZENvbnRyYWN0IGRlbGV0ZUJveGVkQ29udHJhY3Qgb3B0SW4gb3B0SW5Db3N0IHVwZGF0ZUFraXRhREFPRXNjcm93IHVwZGF0ZUFraXRhREFPIG1haW5fb3BVcF9yb3V0ZUAxNAogICAgZXJyCgptYWluX29wVXBfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo0MwogICAgLy8gb3BVcCgpOiB2b2lkIHsgfQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVfTm9PcEAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo5CiAgICAvLyBleHBvcnQgY2xhc3MgUG9sbEZhY3RvcnkgZXh0ZW5kcyBGYWN0b3J5Q29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4YzQyNmY0YmEgLy8gbWV0aG9kICJjcmVhdGUoc3RyaW5nLHN0cmluZyx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGUKICAgIGVycgoKbWFpbl91cGRhdGVfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjQ4CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ1VwZGF0ZUFwcGxpY2F0aW9uJ10gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIFVwZGF0ZUFwcGxpY2F0aW9uICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgdXBkYXRlCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czo6c3BsaXRPcHRJbkNvdW50KGFraXRhREFPOiB1aW50NjQsIGVzY3JvdzogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHVpbnQ2NDoKc3BsaXRPcHRJbkNvdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czo2MjEKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBzcGxpdE9wdEluQ291bnQoYWtpdGFEQU86IEFwcGxpY2F0aW9uLCBlc2Nyb3c6IEFjY291bnQsIGFzc2V0OiBBc3NldCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6NjIyCiAgICAvLyBsZXQgY291bnQ6IHVpbnQ2NCA9IDAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjYyNAogICAgLy8gaWYgKCFlc2Nyb3cuaXNPcHRlZEluKGFzc2V0KSkgewogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYnVyeSAxCiAgICBibnogc3BsaXRPcHRJbkNvdW50X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czoxMDMKICAgIC8vIGNvbnN0IFtzcGxpdHNCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcyhha2l0YURBTywgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNSZXZlbnVlU3BsaXRzKSkKICAgIGZyYW1lX2RpZyAtMwogICAgcHVzaGJ5dGVzICJyZXZlbnVlX3NwbGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6NjI4CiAgICAvLyBjb3VudCArPSBzcGxpdHMubGVuZ3RoCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6NjI1CiAgICAvLyBjb3VudCArPSAxCiAgICBpbnRjXzEgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czo2MjgKICAgIC8vIGNvdW50ICs9IHNwbGl0cy5sZW5ndGgKICAgICsKICAgIGZyYW1lX2J1cnkgMAoKc3BsaXRPcHRJbkNvdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6NjMxCiAgICAvLyByZXR1cm4gY291bnQKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6OlBvbGxGYWN0b3J5LmNyZWF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czoxMQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI3CiAgICAvLyB2ZXJzaW9uID0gR2xvYmFsU3RhdGU8c3RyaW5nPih7IGtleTogR2xvYmFsU3RhdGVLZXlWZXJzaW9uIH0pCiAgICBieXRlYyA2IC8vICJ2ZXJzaW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjEzCiAgICAvLyB0aGlzLnZlcnNpb24udmFsdWUgPSB2ZXJzaW9uCiAgICB1bmNvdmVyIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czozNAogICAgLy8gY2hpbGRDb250cmFjdFZlcnNpb24gPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsga2V5OiBCYXNlRmFjdG9yeUdsb2JhbFN0YXRlS2V5Q2hpbGRDb250cmFjdFZlcnNpb24gfSkKICAgIGJ5dGVjIDcgLy8gImNoaWxkX2NvbnRyYWN0X3ZlcnNpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6MTQKICAgIC8vIHRoaXMuY2hpbGRDb250cmFjdFZlcnNpb24udmFsdWUgPSBjaGlsZFZlcnNpb24KICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjE1CiAgICAvLyB0aGlzLmFraXRhREFPLnZhbHVlID0gYWtpdGFEQU8KICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjY1CiAgICAvLyBha2l0YURBT0VzY3JvdyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YUVzY3JvdyB9KQogICAgYnl0ZWNfMyAvLyAiYWtpdGFfZXNjcm93IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjE2CiAgICAvLyB0aGlzLmFraXRhREFPRXNjcm93LnZhbHVlID0gYWtpdGFEQU9Fc2Nyb3cKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6MTEKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjpQb2xsRmFjdG9yeS5uZXdbcm91dGluZ10oKSAtPiB2b2lkOgpuZXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6MTktMjcKICAgIC8vIG5ldygKICAgIC8vICAgcGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICB0eXBlOiBQb2xsVHlwZSwKICAgIC8vICAgZW5kVGltZTogdWludDY0LAogICAgLy8gICBtYXhTZWxlY3RlZDogdWludDY0LAogICAgLy8gICBxdWVzdGlvbjogc3RyaW5nLAogICAgLy8gICBvcHRpb25zOiBzdHJpbmdbXSwKICAgIC8vICAgZ2F0ZUlEOiB1aW50NjQsCiAgICAvLyApOiB1aW50NjQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjMxLTM4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubmV3UG9sbENvc3QoKSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDYKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6MzQKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6MzEtMzgKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBwYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5uZXdQb2xsQ29zdCgpLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgdW5jb3ZlciA3CiAgICBndHhucyBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo2OS03MQogICAgLy8gTUlOX1BST0dSQU1fUEFHRVMgKwogICAgLy8gKEdMT0JBTF9TVEFURV9LRVlfVUlOVF9DT1NUICogcG9sbC5nbG9iYWxVaW50cykgKwogICAgLy8gKEdMT0JBTF9TVEFURV9LRVlfQllURVNfQ09TVCAqIHBvbGwuZ2xvYmFsQnl0ZXMpICsKICAgIGludGMgNCAvLyA4MTM1MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo3MgogICAgLy8gR2xvYmFsLm1pbkJhbGFuY2UKICAgIGdsb2JhbCBNaW5CYWxhbmNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6NjktNzIKICAgIC8vIE1JTl9QUk9HUkFNX1BBR0VTICsKICAgIC8vIChHTE9CQUxfU1RBVEVfS0VZX1VJTlRfQ09TVCAqIHBvbGwuZ2xvYmFsVWludHMpICsKICAgIC8vIChHTE9CQUxfU1RBVEVfS0VZX0JZVEVTX0NPU1QgKiBwb2xsLmdsb2JhbEJ5dGVzKSArCiAgICAvLyBHbG9iYWwubWluQmFsYW5jZQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjMxLTM4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubmV3UG9sbENvc3QoKSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gSW52YWxpZCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6NDAtNTEKICAgIC8vIGNvbnN0IG1pbnQgPSBwb2xsLmNhbGwKICAgIC8vICAgLmNyZWF0ZSh7CiAgICAvLyAgICAgYXJnczogWwogICAgLy8gICAgICAgdGhpcy5ha2l0YURBTy52YWx1ZS5pZCwKICAgIC8vICAgICAgIHR5cGUsCiAgICAvLyAgICAgICBlbmRUaW1lLAogICAgLy8gICAgICAgbWF4U2VsZWN0ZWQsCiAgICAvLyAgICAgICBxdWVzdGlvbiwKICAgIC8vICAgICAgIG9wdGlvbnMsCiAgICAvLyAgICAgICBnYXRlSUQKICAgIC8vICAgICBdLAogICAgLy8gICB9KQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjQzCiAgICAvLyB0aGlzLmFraXRhREFPLnZhbHVlLmlkLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjQzCiAgICAvLyB0aGlzLmFraXRhREFPLnZhbHVlLmlkLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo0MC01MQogICAgLy8gY29uc3QgbWludCA9IHBvbGwuY2FsbAogICAgLy8gICAuY3JlYXRlKHsKICAgIC8vICAgICBhcmdzOiBbCiAgICAvLyAgICAgICB0aGlzLmFraXRhREFPLnZhbHVlLmlkLAogICAgLy8gICAgICAgdHlwZSwKICAgIC8vICAgICAgIGVuZFRpbWUsCiAgICAvLyAgICAgICBtYXhTZWxlY3RlZCwKICAgIC8vICAgICAgIHF1ZXN0aW9uLAogICAgLy8gICAgICAgb3B0aW9ucywKICAgIC8vICAgICAgIGdhdGVJRAogICAgLy8gICAgIF0sCiAgICAvLyAgIH0pCiAgICBwdXNoYnl0ZXMgMHg5ZmE4MzVhOCAvLyBtZXRob2QgImNyZWF0ZSh1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCxzdHJpbmcsc3RyaW5nW10sdWludDY0KXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgNQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgNAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjI5CiAgICAvLyBjb25zdCBwb2xsID0gY29tcGlsZUFyYzQoUG9sbCkKICAgIGludGNfMiAvLyA4CiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgcHVzaGludCAxMSAvLyAxMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50CiAgICBwdXNoYnl0ZXMgYmFzZTY0KEM0RUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KEN5QUZBQUVDQ01SM0pnMEpkbTkwWlhOZmIyNWxDWFp2ZEdWelgzUjNid3QyYjNSbGMxOTBhSEpsWlFwMmIzUmxjMTltYjNWeUNuWnZkR1Z6WDJacGRtVUpZV3RwZEdGZlpHRnZCSFI1Y0dVSlltOTRYMk52ZFc1MENHVnVaRjkwYVcxbEIyZGhkR1ZmYVdRTWIzQjBhVzl1WDJOdmRXNTBERzFoZUY5elpXeGxZM1JsWkFRVkgzeDFNUmhBQUJBb0ltY3BJbWNxSW1jckltY25CQ0puTVJrVVJERVlRUUEwZ2dZRTRVR1FnQVJiejVFQUJOMHduSHNFV245Sk1nUXo2U3lVQklWTjdlQTJHZ0NPQmdHY0FoWUMyd000QTFJQUFRQWpRNEFFbjZnMXFEWWFBSTRCQUFFQUlqWWFBVWtWSlJKRUZ6WWFBa2xPQWtrVkl4SkVOaG9EU1JVbEVrUVhOaG9FU1JVbEVrUVhUZ00yR2dWSklsa2tDRXNCRlJKRVZ3SUFOaG9HU1U0Q1RnVTJHZ2RKRlNVU1JCY3lEVVF5QjBzRURFUkxCQmVCS0F4RUp3VlBCbWNuQms4Rlp5Y0pUR2NuQ0U4RFo0QUljWFZsYzNScGIyNU1aeUpaU1NRUFFRRUdTWUVGRGtFQS95TkVTd09BQVJRU1FBQUpTd09BQVNnU1FRQVhTd0lrRDBFQTRFa2pDVXNERDBFQTF5TkVKd3RMQTJjbkNrc0JTVTRDWnljSEltZExBbGNDQUVsRkIwc0JSRWtpV1VwWkpBaExBazRDV0ZjQ0FJQUtiM0IwYVc5dVgyOXVaVXhuSTBzQ0RFUkpKRmxLV1NRSVdGY0NBSUFLYjNCMGFXOXVYM1IzYjB4bmdRTVBRUUFqSkVzQkRFUkxCRW1CQkZsS1dTUUlXRmNDQUlBTWIzQjBhVzl1WDNSb2NtVmxUR2RKZ1FRUFFRQWpnUU5MQVF4RVN3UkpnUVpaU2xra0NGaFhBZ0NBQzI5d2RHbHZibDltYjNWeVRHZEpnUVVQUVFBaWdRUkxBUXhFU3dSSkpWbEtXU1FJV0ZjQ0FJQUxiM0IwYVc5dVgyWnBkbVZNWnlORElrTC9KaUpDL3Y0MkdnRkhBaUpaU1U0Q2dTQUxKQWhNRlJKRU1nY2lKd2hsUkExRUlrbExBZ3hCQUZSTEFsY0NBRXNCU1U0Q2dTQUxnU0JZU2IxRkFVUkp2RWl4Z0JoTlFsSWdjbVZtZFc1a0lHWnZjaUJ3YjJ4c0lIWnZkR1d5QlNFRXNnaXlCeU95RUNLeUFiTWlKd2RsUkNNSkp3ZE1aeU1JUlFGQy82VWpReUtBQURFV0pBbEpPQkFqRWtReEZpTUpTVGdRZ1FZU1JEWWFBVWNDSWxsSlRnSkpKUXNrQ0U4Q0ZSSkVNZ2NpSndobFJBNUVNUUM5UlFFVVJJRUZEa0VBZjBsQkFIc2pSQ0luQldWRU1RQkZCeUluQ1dWTVJRZEVTd000R0V5QUEyRmhiR1ZJZ1NoYkVrRUFVVXNDT0JsQUFFcExBamdiZ1FRU1FRQkFTd0lpd2hxQUJFT1NKbFVTUVFBeFN3SWp3aHBMQmhKQkFDWkxBaVRDR2tzRkZoSkJBQm9qUkVzRFNUZ0hNZ29TVERnSUlRUVNFRVJMQVlnQXAwZ2pReUpDLytNaVF2K0NNUllqQ1VrNEVDTVNSRFlhQVVjQ0lsbEpUZ0pKSlFza0NFOENGUkpFTWdjaUp3aGxSQTVFTVFDOVJRRVVSSUVGRGtFQUpVbEJBQ0VqUkNJbkNXVkVGRVJMQWtrNEJ6SUtFa3c0Q0NFRUVoQkVTd0dJQUVaSUkwTWlRdi9jTmhvQlNSV0JJQkpFdlVVQmdBRUFJazhDVkNjTVRGQ3dJME0yR2dGSkZTVVNSQmN4QUNJbkJXVkVnQVozWVd4c1pYUmxTSElJUkJKRUp3Vk1aeU5EaWdFQklvQUFSd1VqSWljR1pVU0FBUjRTUUFBTUlpY0daVVNBQVNnU1FRQTlJaWNGWlVReEFMRk1nQU56WVd4bFNJRVFXNEFFMVhTN0VMSWFzaGl5R29FR3NoQWlzZ0d6dEQ1SlZ3UUFURmNBQkNjTUVrUkpGU1VTUkJlTUJ5SW5CbVZFZ0FFS0VrQUFEQ0luQm1WRWdBRWVFa0VBajR2L0lsa2pFa1NML3lSYlNZd0ZJaWNLWlVRakNVc0JEMFJBQUI4aUtHVkVpd2NJS0V4bk1RQWl1VWdpSndkbFJDTUlKd2RNWjR2L2pBQ0ppd1VqRWtFQURTSXBaVVNMQndncFRHZEMvOWVMQlNRU1FRQU5JaXBsUklzSENDcE1aMEwvdzRzRmdRTVNRUUFOSWl0bFJJc0hDQ3RNWjBML3Jvc0ZnUVFTUWYrbUlpY0VaVVNMQndnbkJFeG5RditYaS84aVdVbU1BU0luQzJWRURrUWlqQUtMQW9zQkRFSC9mb3YvVndJQVNZd0Fpd0pKVGdJbEMxdEpqQVlpSndwbFJDTUpEa1FqQ0VtTUE0d0Vpd1NMQVF4QkFCU0xCRWtsQzRzQVRGdUxCaE5FSXdpTUJFTC81SXNHUUFBUklpaGxSSXNIQ0NoTVo0c0RqQUpDLzZPTEJpTVNRUUFOSWlsbFJJc0hDQ2xNWjBMLzVZc0dKQkpCQUEwaUttVkVpd2NJS2t4blF2L1Jpd2FCQXhKQkFBMGlLMlZFaXdjSUsweG5Rdis4aXdhQkJCSkIvN1FpSndSbFJJc0hDQ2NFVEdkQy82VT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6NDAtNTEKICAgIC8vIGNvbnN0IG1pbnQgPSBwb2xsLmNhbGwKICAgIC8vICAgLmNyZWF0ZSh7CiAgICAvLyAgICAgYXJnczogWwogICAgLy8gICAgICAgdGhpcy5ha2l0YURBTy52YWx1ZS5pZCwKICAgIC8vICAgICAgIHR5cGUsCiAgICAvLyAgICAgICBlbmRUaW1lLAogICAgLy8gICAgICAgbWF4U2VsZWN0ZWQsCiAgICAvLyAgICAgICBxdWVzdGlvbiwKICAgIC8vICAgICAgIG9wdGlvbnMsCiAgICAvLyAgICAgICBnYXRlSUQKICAgIC8vICAgICBdLAogICAgLy8gICB9KQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjQwLTUzCiAgICAvLyBjb25zdCBtaW50ID0gcG9sbC5jYWxsCiAgICAvLyAgIC5jcmVhdGUoewogICAgLy8gICAgIGFyZ3M6IFsKICAgIC8vICAgICAgIHRoaXMuYWtpdGFEQU8udmFsdWUuaWQsCiAgICAvLyAgICAgICB0eXBlLAogICAgLy8gICAgICAgZW5kVGltZSwKICAgIC8vICAgICAgIG1heFNlbGVjdGVkLAogICAgLy8gICAgICAgcXVlc3Rpb24sCiAgICAvLyAgICAgICBvcHRpb25zLAogICAgLy8gICAgICAgZ2F0ZUlECiAgICAvLyAgICAgXSwKICAgIC8vICAgfSkKICAgIC8vICAgLml0eG4KICAgIC8vICAgLmNyZWF0ZWRBcHAKICAgIGdpdHhuIDAgQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo1NS02MAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IG1pbnQuYWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IEdsb2JhbC5taW5CYWxhbmNlCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjU3CiAgICAvLyByZWNlaXZlcjogbWludC5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6NTgKICAgIC8vIGFtb3VudDogR2xvYmFsLm1pbkJhbGFuY2UKICAgIGdsb2JhbCBNaW5CYWxhbmNlCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjU1LTU5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogbWludC5hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLm1pbkJhbGFuY2UKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo1NS02MAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IG1pbnQuYWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IEdsb2JhbC5taW5CYWxhbmNlCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czoxOS0yNwogICAgLy8gbmV3KAogICAgLy8gICBwYXltZW50OiBndHhuLlBheW1lbnRUeG4sCiAgICAvLyAgIHR5cGU6IFBvbGxUeXBlLAogICAgLy8gICBlbmRUaW1lOiB1aW50NjQsCiAgICAvLyAgIG1heFNlbGVjdGVkOiB1aW50NjQsCiAgICAvLyAgIHF1ZXN0aW9uOiBzdHJpbmcsCiAgICAvLyAgIG9wdGlvbnM6IHN0cmluZ1tdLAogICAgLy8gICBnYXRlSUQ6IHVpbnQ2NCwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjpQb2xsRmFjdG9yeS5uZXdQb2xsQ29zdFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm5ld1BvbGxDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjY5LTcxCiAgICAvLyBNSU5fUFJPR1JBTV9QQUdFUyArCiAgICAvLyAoR0xPQkFMX1NUQVRFX0tFWV9VSU5UX0NPU1QgKiBwb2xsLmdsb2JhbFVpbnRzKSArCiAgICAvLyAoR0xPQkFMX1NUQVRFX0tFWV9CWVRFU19DT1NUICogcG9sbC5nbG9iYWxCeXRlcykgKwogICAgaW50YyA0IC8vIDgxMzUwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjcyCiAgICAvLyBHbG9iYWwubWluQmFsYW5jZQogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo2OS03MgogICAgLy8gTUlOX1BST0dSQU1fUEFHRVMgKwogICAgLy8gKEdMT0JBTF9TVEFURV9LRVlfVUlOVF9DT1NUICogcG9sbC5nbG9iYWxVaW50cykgKwogICAgLy8gKEdMT0JBTF9TVEFURV9LRVlfQllURVNfQ09TVCAqIHBvbGwuZ2xvYmFsQnl0ZXMpICsKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6NjUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjpGYWN0b3J5Q29udHJhY3QuaW5pdEJveGVkQ29udHJhY3Rbcm91dGluZ10oKSAtPiB2b2lkOgppbml0Qm94ZWRDb250cmFjdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjQyCiAgICAvLyBpbml0Qm94ZWRDb250cmFjdCh2ZXJzaW9uOiBzdHJpbmcsIHNpemU6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6MzQKICAgIC8vIGNoaWxkQ29udHJhY3RWZXJzaW9uID0gR2xvYmFsU3RhdGU8c3RyaW5nPih7IGtleTogQmFzZUZhY3RvcnlHbG9iYWxTdGF0ZUtleUNoaWxkQ29udHJhY3RWZXJzaW9uIH0pCiAgICBieXRlYyA3IC8vICJjaGlsZF9jb250cmFjdF92ZXJzaW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NDMKICAgIC8vIHRoaXMuY2hpbGRDb250cmFjdFZlcnNpb24udmFsdWUgPSB2ZXJzaW9uCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6MzgKICAgIC8vIGJveGVkQ29udHJhY3QgPSBCb3g8Ynl0ZXM+KHsga2V5OiBCb3hLZXlCb3hlZENvbnRyYWN0IH0pCiAgICBieXRlY18xIC8vICJiYyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjQ0CiAgICAvLyBpZiAoIXRoaXMuYm94ZWRDb250cmFjdC5leGlzdHMpIHsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYm56IGluaXRCb3hlZENvbnRyYWN0X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo0NQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcywgRVJSX05PVF9BS0lUQV9EQU8pCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgQWtpdGEgREFPIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjM4CiAgICAvLyBib3hlZENvbnRyYWN0ID0gQm94PGJ5dGVzPih7IGtleTogQm94S2V5Qm94ZWRDb250cmFjdCB9KQogICAgYnl0ZWNfMSAvLyAiYmMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo0NgogICAgLy8gdGhpcy5ib3hlZENvbnRyYWN0LmNyZWF0ZSh7IHNpemUgfSkKICAgIHN3YXAKICAgIGJveF9jcmVhdGUKICAgIHBvcAoKaW5pdEJveGVkQ29udHJhY3RfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NDIKICAgIC8vIGluaXRCb3hlZENvbnRyYWN0KHZlcnNpb246IHN0cmluZywgc2l6ZTogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgppbml0Qm94ZWRDb250cmFjdF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjQ4CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ5dGVjXzIgLy8gIndhbGxldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjQ4CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IHRoZSBBa2l0YSBEQU8gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6MzgKICAgIC8vIGJveGVkQ29udHJhY3QgPSBCb3g8Ynl0ZXM+KHsga2V5OiBCb3hLZXlCb3hlZENvbnRyYWN0IH0pCiAgICBieXRlY18xIC8vICJiYyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjQ5CiAgICAvLyB0aGlzLmJveGVkQ29udHJhY3QucmVzaXplKHNpemUpCiAgICBzd2FwCiAgICBib3hfcmVzaXplCiAgICBiIGluaXRCb3hlZENvbnRyYWN0X2FmdGVyX2lmX2Vsc2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjpGYWN0b3J5Q29udHJhY3QubG9hZEJveGVkQ29udHJhY3Rbcm91dGluZ10oKSAtPiB2b2lkOgpsb2FkQm94ZWRDb250cmFjdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjUzCiAgICAvLyBsb2FkQm94ZWRDb250cmFjdChvZmZzZXQ6IHVpbnQ2NCwgZGF0YTogYnl0ZXMpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50OFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjU0CiAgICAvLyBjb25zdCBleHBlY3RlZFByZXZpb3VzQ2FsbHM6IHVpbnQ2NCA9IG9mZnNldCAvIDIwMzIKICAgIHB1c2hpbnQgMjAzMiAvLyAyMDMyCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1NQogICAgLy8gY29uc3QgdHhuID0gZ3R4bi5UcmFuc2FjdGlvbihUeG4uZ3JvdXBJbmRleCAtIGV4cGVjdGVkUHJldmlvdXNDYWxscyAtIDEpCiAgICB0eG4gR3JvdXBJbmRleAogICAgc3dhcAogICAgLQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NTcKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1Ny01OAogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICBieiBsb2FkQm94ZWRDb250cmFjdF9ib29sX2ZhbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjU4CiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgZHVwCiAgICBndHhucyBBcHBsaWNhdGlvbklECiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1Ny01OAogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICBieiBsb2FkQm94ZWRDb250cmFjdF9ib29sX2ZhbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjU5CiAgICAvLyAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMwogICAgZHVwCiAgICBndHhucyBOdW1BcHBBcmdzCiAgICBwdXNoaW50IDMgLy8gMwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjU3LTU5CiAgICAvLyB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgLy8gJiYgdHhuLmFwcElkID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQKICAgIC8vICYmIHR4bi5udW1BcHBBcmdzID09PSAzCiAgICBieiBsb2FkQm94ZWRDb250cmFjdF9ib29sX2ZhbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjYwCiAgICAvLyAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIGR1cAogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1Ny02MAogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICAvLyAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMwogICAgLy8gJiYgdHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wCiAgICBibnogbG9hZEJveGVkQ29udHJhY3RfYm9vbF9mYWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo2MQogICAgLy8gJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKHRoaXMuaW5pdEJveGVkQ29udHJhY3QpCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBndHhuc2FzIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgNSAvLyBtZXRob2QgImluaXRCb3hlZENvbnRyYWN0KHN0cmluZyx1aW50NjQpdm9pZCIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1Ny02MQogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICAvLyAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMwogICAgLy8gJiYgdHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wCiAgICAvLyAmJiB0eG4uYXBwQXJncygwKSA9PT0gbWV0aG9kU2VsZWN0b3IodGhpcy5pbml0Qm94ZWRDb250cmFjdCkKICAgIGJ6IGxvYWRCb3hlZENvbnRyYWN0X2Jvb2xfZmFsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NjIKICAgIC8vICYmIHR4bi5zZW5kZXIgPT09IFR4bi5zZW5kZXIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NTctNjIKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gJiYgdHhuLm51bUFwcEFyZ3MgPT09IDMKICAgIC8vICYmIHR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcAogICAgLy8gJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKHRoaXMuaW5pdEJveGVkQ29udHJhY3QpCiAgICAvLyAmJiB0eG4uc2VuZGVyID09PSBUeG4uc2VuZGVyCiAgICBieiBsb2FkQm94ZWRDb250cmFjdF9ib29sX2ZhbHNlQDgKICAgIGludGNfMSAvLyAxCgpsb2FkQm94ZWRDb250cmFjdF9ib29sX21lcmdlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1Ni02MwogICAgLy8gYXNzZXJ0KCgKICAgIC8vICAgdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICAgJiYgdHhuLmFwcElkID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQKICAgIC8vICAgJiYgdHhuLm51bUFwcEFyZ3MgPT09IDMKICAgIC8vICAgJiYgdHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wCiAgICAvLyAgICYmIHR4bi5hcHBBcmdzKDApID09PSBtZXRob2RTZWxlY3Rvcih0aGlzLmluaXRCb3hlZENvbnRyYWN0KQogICAgLy8gICAmJiB0eG4uc2VuZGVyID09PSBUeG4uc2VuZGVyCiAgICAvLyApLCBFUlJfSU5WQUxJRF9DQUxMX09SREVSKQogICAgYXNzZXJ0IC8vIEludmFsaWQgY2FsbCBvcmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6MzgKICAgIC8vIGJveGVkQ29udHJhY3QgPSBCb3g8Ynl0ZXM+KHsga2V5OiBCb3hLZXlCb3hlZENvbnRyYWN0IH0pCiAgICBieXRlY18xIC8vICJiYyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5ib3hlZENvbnRyYWN0LmV4aXN0cywgRVJSX0NPTlRSQUNUX05PVF9TRVQpCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBDb250cmFjdCBub3Qgc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czozOAogICAgLy8gYm94ZWRDb250cmFjdCA9IEJveDxieXRlcz4oeyBrZXk6IEJveEtleUJveGVkQ29udHJhY3QgfSkKICAgIGJ5dGVjXzEgLy8gImJjIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NjUKICAgIC8vIHRoaXMuYm94ZWRDb250cmFjdC5yZXBsYWNlKG9mZnNldCwgZGF0YSkKICAgIGRpZyAzCiAgICBkaWcgMwogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjUzCiAgICAvLyBsb2FkQm94ZWRDb250cmFjdChvZmZzZXQ6IHVpbnQ2NCwgZGF0YTogYnl0ZXMpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmxvYWRCb3hlZENvbnRyYWN0X2Jvb2xfZmFsc2VAODoKICAgIGludGNfMCAvLyAwCiAgICBiIGxvYWRCb3hlZENvbnRyYWN0X2Jvb2xfbWVyZ2VAOQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjpGYWN0b3J5Q29udHJhY3QuZGVsZXRlQm94ZWRDb250cmFjdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlbGV0ZUJveGVkQ29udHJhY3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo2OQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuZ2V0QWtpdGFEQU9XYWxsZXQoKS5hZGRyZXNzLCBFUlJfTk9UX0FLSVRBX0RBTykKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjMyCiAgICAvLyBjb25zdCBbd2FsbGV0SURdID0gb3AuQXBwR2xvYmFsLmdldEV4VWludDY0KHRoaXMuYWtpdGFEQU8udmFsdWUsIEJ5dGVzKEFraXRhREFPR2xvYmFsU3RhdGVLZXlzV2FsbGV0KSkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyOQogICAgLy8gYWtpdGFEQU8gPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFEQU8gfSkKICAgIGJ5dGVjXzAgLy8gImFraXRhX2RhbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjMyCiAgICAvLyBjb25zdCBbd2FsbGV0SURdID0gb3AuQXBwR2xvYmFsLmdldEV4VWludDY0KHRoaXMuYWtpdGFEQU8udmFsdWUsIEJ5dGVzKEFraXRhREFPR2xvYmFsU3RhdGVLZXlzV2FsbGV0KSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBieXRlY18yIC8vICJ3YWxsZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo2OQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuZ2V0QWtpdGFEQU9XYWxsZXQoKS5hZGRyZXNzLCBFUlJfTk9UX0FLSVRBX0RBTykKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgQWtpdGEgREFPIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjM4CiAgICAvLyBib3hlZENvbnRyYWN0ID0gQm94PGJ5dGVzPih7IGtleTogQm94S2V5Qm94ZWRDb250cmFjdCB9KQogICAgYnl0ZWNfMSAvLyAiYmMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo3MAogICAgLy8gdGhpcy5ib3hlZENvbnRyYWN0LmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjY4CiAgICAvLyBkZWxldGVCb3hlZENvbnRyYWN0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjpBa2l0YUZlZUdlbmVyYXRvckNvbnRyYWN0V2l0aE9wdEluLm9wdEluW3JvdXRpbmddKCkgLT4gdm9pZDoKb3B0SW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNTAKICAgIC8vIG9wdEluKHBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwgYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNTIKICAgIC8vIGNvbnN0IGNvdW50ID0gc3BsaXRPcHRJbkNvdW50KHRoaXMuYWtpdGFEQU8udmFsdWUsIHRoaXMuYWtpdGFEQU9Fc2Nyb3cudmFsdWUuYWRkcmVzcywgYXNzZXQpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MjkKICAgIC8vIGFraXRhREFPID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBHbG9iYWxTdGF0ZUtleUFraXRhREFPIH0pCiAgICBieXRlY18wIC8vICJha2l0YV9kYW8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNTIKICAgIC8vIGNvbnN0IGNvdW50ID0gc3BsaXRPcHRJbkNvdW50KHRoaXMuYWtpdGFEQU8udmFsdWUsIHRoaXMuYWtpdGFEQU9Fc2Nyb3cudmFsdWUuYWRkcmVzcywgYXNzZXQpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjY1CiAgICAvLyBha2l0YURBT0VzY3JvdyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YUVzY3JvdyB9KQogICAgYnl0ZWNfMyAvLyAiYWtpdGFfZXNjcm93IgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTUyCiAgICAvLyBjb25zdCBjb3VudCA9IHNwbGl0T3B0SW5Db3VudCh0aGlzLmFraXRhREFPLnZhbHVlLCB0aGlzLmFraXRhREFPRXNjcm93LnZhbHVlLmFkZHJlc3MsIGFzc2V0KQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGRpZyAyCiAgICBjYWxsc3ViIHNwbGl0T3B0SW5Db3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTU0LTE2MQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiAoMSArIGNvdW50KSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDIKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNTcKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNTQtMTYxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IEdsb2JhbC5hc3NldE9wdEluTWluQmFsYW5jZSAqICgxICsgY291bnQpLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgdW5jb3ZlciAzCiAgICBndHhucyBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjE1OAogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiAoMSArIGNvdW50KSwKICAgIGdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgNAogICAgKwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTU0LTE2MQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiAoMSArIGNvdW50KSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gSW52YWxpZCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNjMtMTY5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTY1CiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTY2CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjE2My0xNjgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjE2My0xNjkKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTUwCiAgICAvLyBvcHRJbihwYXltZW50OiBndHhuLlBheW1lbnRUeG4sIGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjpBa2l0YUZlZUdlbmVyYXRvckNvbnRyYWN0V2l0aE9wdEluLm9wdEluQ29zdFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjE3MgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTc0CiAgICAvLyBjb25zdCBjb3VudCA9IHNwbGl0T3B0SW5Db3VudCh0aGlzLmFraXRhREFPLnZhbHVlLCB0aGlzLmFraXRhREFPRXNjcm93LnZhbHVlLmFkZHJlc3MsIGFzc2V0KQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTc0CiAgICAvLyBjb25zdCBjb3VudCA9IHNwbGl0T3B0SW5Db3VudCh0aGlzLmFraXRhREFPLnZhbHVlLCB0aGlzLmFraXRhREFPRXNjcm93LnZhbHVlLmFkZHJlc3MsIGFzc2V0KQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo2NQogICAgLy8gYWtpdGFEQU9Fc2Nyb3cgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFFc2Nyb3cgfSkKICAgIGJ5dGVjXzMgLy8gImFraXRhX2VzY3JvdyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjE3NAogICAgLy8gY29uc3QgY291bnQgPSBzcGxpdE9wdEluQ291bnQodGhpcy5ha2l0YURBTy52YWx1ZSwgdGhpcy5ha2l0YURBT0VzY3Jvdy52YWx1ZS5hZGRyZXNzLCBhc3NldCkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc3BsaXRPcHRJbkNvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNzUKICAgIC8vIHJldHVybiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiAoMSArIGNvdW50KQogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAyCiAgICArCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNzIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjpBa2l0YUJhc2VGZWVHZW5lcmF0b3JDb250cmFjdC51cGRhdGVBa2l0YURBT0VzY3Jvd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZUFraXRhREFPRXNjcm93OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTM3CiAgICAvLyB1cGRhdGVBa2l0YURBT0VzY3JvdyhhcHA6IEFwcGxpY2F0aW9uKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTM4CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ5dGVjXzIgLy8gIndhbGxldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjEzOAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuZ2V0QWtpdGFEQU9XYWxsZXQoKS5hZGRyZXNzLCBFUlJfTk9UX0FLSVRBX0RBTykKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgQWtpdGEgREFPIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjY1CiAgICAvLyBha2l0YURBT0VzY3JvdyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YUVzY3JvdyB9KQogICAgYnl0ZWNfMyAvLyAiYWtpdGFfZXNjcm93IgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTM5CiAgICAvLyB0aGlzLmFraXRhREFPRXNjcm93LnZhbHVlID0gYXBwCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTM3CiAgICAvLyB1cGRhdGVBa2l0YURBT0VzY3JvdyhhcHA6IEFwcGxpY2F0aW9uKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6OlVwZ3JhZGVhYmxlQWtpdGFCYXNlQ29udHJhY3QudXBkYXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6NDgKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsnVXBkYXRlQXBwbGljYXRpb24nXSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo1MAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuZ2V0QWtpdGFEQU9XYWxsZXQoKS5hZGRyZXNzLCBFUlJfTk9UX0FLSVRBX0RBTykKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjMyCiAgICAvLyBjb25zdCBbd2FsbGV0SURdID0gb3AuQXBwR2xvYmFsLmdldEV4VWludDY0KHRoaXMuYWtpdGFEQU8udmFsdWUsIEJ5dGVzKEFraXRhREFPR2xvYmFsU3RhdGVLZXlzV2FsbGV0KSkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyOQogICAgLy8gYWtpdGFEQU8gPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFEQU8gfSkKICAgIGJ5dGVjXzAgLy8gImFraXRhX2RhbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjMyCiAgICAvLyBjb25zdCBbd2FsbGV0SURdID0gb3AuQXBwR2xvYmFsLmdldEV4VWludDY0KHRoaXMuYWtpdGFEQU8udmFsdWUsIEJ5dGVzKEFraXRhREFPR2xvYmFsU3RhdGVLZXlzV2FsbGV0KSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkdXAKICAgIGJ5dGVjXzIgLy8gIndhbGxldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjUwCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgdGhlIEFraXRhIERBTyBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjU0CiAgICAvLyBjb25zdCBbcGx1Z2luQXBwTGlzdEJ5dGVzXSA9IG9wLkFwcEdsb2JhbC5nZXRFeEJ5dGVzKGFraXRhREFPLCBCeXRlcyhBa2l0YURBT0dsb2JhbFN0YXRlS2V5c1BsdWdpbkFwcExpc3QpKQogICAgcHVzaGJ5dGVzICJwYWwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo1MQogICAgLy8gY29uc3QgdXBkYXRlUGx1Z2luID0gZ2V0UGx1Z2luQXBwTGlzdCh0aGlzLmFraXRhREFPLnZhbHVlKS51cGRhdGUKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo1MgogICAgLy8gYXNzZXJ0KEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkID09PSB1cGRhdGVQbHVnaW4sIEVSUl9JTlZBTElEX1VQR1JBREUpCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgPT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIGFwcCB1cGdyYWRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyNwogICAgLy8gdmVyc2lvbiA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5VmVyc2lvbiB9KQogICAgYnl0ZWMgNiAvLyAidmVyc2lvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjUzCiAgICAvLyB0aGlzLnZlcnNpb24udmFsdWUgPSBuZXdWZXJzaW9uCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6NDgKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsnVXBkYXRlQXBwbGljYXRpb24nXSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjpBa2l0YUJhc2VDb250cmFjdC51cGRhdGVBa2l0YURBT1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZUFraXRhREFPOgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzgKICAgIC8vIHVwZGF0ZUFraXRhREFPKGFraXRhREFPOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjM5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ5dGVjXzIgLy8gIndhbGxldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjM5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IHRoZSBBa2l0YSBEQU8gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MjkKICAgIC8vIGFraXRhREFPID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBHbG9iYWxTdGF0ZUtleUFraXRhREFPIH0pCiAgICBieXRlY18wIC8vICJha2l0YV9kYW8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo0MAogICAgLy8gdGhpcy5ha2l0YURBTy52YWx1ZSA9IGFraXRhREFPCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzgKICAgIC8vIHVwZGF0ZUFraXRhREFPKGFraXRhREFPOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=\",\"clear\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==\"},\"byteCode\":{\"approval\":\"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\",\"clear\":\"C4EBQw==\"},\"events\":[],\"templateVariables\":{}} as unknown as Arc56Contract\n\n/**\n * A state record containing binary data\n */\nexport interface BinaryState {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array | undefined\n /**\n * Gets the state value as a string\n */\n asString(): string | undefined\n}\n\nclass BinaryStateValue implements BinaryState {\n constructor(private value: Uint8Array | undefined) {}\n\n asByteArray(): Uint8Array | undefined {\n return this.value\n }\n\n asString(): string | undefined {\n return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined\n }\n}\n\n/**\n * Expands types for IntelliSense so they are more human readable\n * See https://stackoverflow.com/a/69288824\n */\nexport type Expand<T> = T extends (...args: infer A) => infer R\n ? (...args: Expand<A>) => Expand<R>\n : T extends infer O\n ? { [K in keyof O]: O[K] }\n : never\n\n\n/**\n * The argument types for the PollFactory contract\n */\nexport type PollFactoryArgs = {\n /**\n * The object representation of the arguments for each method\n */\n obj: {\n 'create(string,string,uint64,uint64)void': {\n version: string\n childVersion: string\n akitaDao: bigint | number\n akitaDaoEscrow: bigint | number\n }\n 'new(pay,uint8,uint64,uint64,string,string[],uint64)uint64': {\n payment: AppMethodCallTransactionArgument\n type: bigint | number\n endTime: bigint | number\n maxSelected: bigint | number\n question: string\n options: string[]\n gateId: bigint | number\n }\n 'newPollCost()uint64': Record<string, never>\n 'initBoxedContract(string,uint64)void': {\n version: string\n size: bigint | number\n }\n 'loadBoxedContract(uint64,byte[])void': {\n offset: bigint | number\n data: Uint8Array\n }\n 'deleteBoxedContract()void': Record<string, never>\n 'optIn(pay,uint64)void': {\n /**\n * The payment transaction\n */\n payment: AppMethodCallTransactionArgument\n /**\n * The asset to be opted into\n */\n asset: bigint | number\n }\n 'optInCost(uint64)uint64': {\n asset: bigint | number\n }\n 'updateAkitaDAOEscrow(uint64)void': {\n app: bigint | number\n }\n 'update(string)void': {\n newVersion: string\n }\n 'updateAkitaDAO(uint64)void': {\n akitaDao: bigint | number\n }\n 'opUp()void': Record<string, never>\n }\n /**\n * The tuple representation of the arguments for each method\n */\n tuple: {\n 'create(string,string,uint64,uint64)void': [version: string, childVersion: string, akitaDao: bigint | number, akitaDaoEscrow: bigint | number]\n 'new(pay,uint8,uint64,uint64,string,string[],uint64)uint64': [payment: AppMethodCallTransactionArgument, type: bigint | number, endTime: bigint | number, maxSelected: bigint | number, question: string, options: string[], gateId: bigint | number]\n 'newPollCost()uint64': []\n 'initBoxedContract(string,uint64)void': [version: string, size: bigint | number]\n 'loadBoxedContract(uint64,byte[])void': [offset: bigint | number, data: Uint8Array]\n 'deleteBoxedContract()void': []\n 'optIn(pay,uint64)void': [payment: AppMethodCallTransactionArgument, asset: bigint | number]\n 'optInCost(uint64)uint64': [asset: bigint | number]\n 'updateAkitaDAOEscrow(uint64)void': [app: bigint | number]\n 'update(string)void': [newVersion: string]\n 'updateAkitaDAO(uint64)void': [akitaDao: bigint | number]\n 'opUp()void': []\n }\n}\n\n/**\n * The return type for each method\n */\nexport type PollFactoryReturns = {\n 'create(string,string,uint64,uint64)void': void\n 'new(pay,uint8,uint64,uint64,string,string[],uint64)uint64': bigint\n 'newPollCost()uint64': bigint\n 'initBoxedContract(string,uint64)void': void\n 'loadBoxedContract(uint64,byte[])void': void\n 'deleteBoxedContract()void': void\n 'optIn(pay,uint64)void': void\n 'optInCost(uint64)uint64': bigint\n 'updateAkitaDAOEscrow(uint64)void': void\n 'update(string)void': void\n 'updateAkitaDAO(uint64)void': void\n 'opUp()void': void\n}\n\n/**\n * Defines the types of available calls and state of the PollFactory smart contract.\n */\nexport type PollFactoryTypes = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods:\n & Record<'create(string,string,uint64,uint64)void' | 'create', {\n argsObj: PollFactoryArgs['obj']['create(string,string,uint64,uint64)void']\n argsTuple: PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']\n returns: PollFactoryReturns['create(string,string,uint64,uint64)void']\n }>\n & Record<'new(pay,uint8,uint64,uint64,string,string[],uint64)uint64' | 'new', {\n argsObj: PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']\n argsTuple: PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']\n returns: PollFactoryReturns['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']\n }>\n & Record<'newPollCost()uint64' | 'newPollCost', {\n argsObj: PollFactoryArgs['obj']['newPollCost()uint64']\n argsTuple: PollFactoryArgs['tuple']['newPollCost()uint64']\n returns: PollFactoryReturns['newPollCost()uint64']\n }>\n & Record<'initBoxedContract(string,uint64)void' | 'initBoxedContract', {\n argsObj: PollFactoryArgs['obj']['initBoxedContract(string,uint64)void']\n argsTuple: PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']\n returns: PollFactoryReturns['initBoxedContract(string,uint64)void']\n }>\n & Record<'loadBoxedContract(uint64,byte[])void' | 'loadBoxedContract', {\n argsObj: PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void']\n argsTuple: PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']\n returns: PollFactoryReturns['loadBoxedContract(uint64,byte[])void']\n }>\n & Record<'deleteBoxedContract()void' | 'deleteBoxedContract', {\n argsObj: PollFactoryArgs['obj']['deleteBoxedContract()void']\n argsTuple: PollFactoryArgs['tuple']['deleteBoxedContract()void']\n returns: PollFactoryReturns['deleteBoxedContract()void']\n }>\n & Record<'optIn(pay,uint64)void' | 'optIn', {\n argsObj: PollFactoryArgs['obj']['optIn(pay,uint64)void']\n argsTuple: PollFactoryArgs['tuple']['optIn(pay,uint64)void']\n returns: PollFactoryReturns['optIn(pay,uint64)void']\n }>\n & Record<'optInCost(uint64)uint64' | 'optInCost', {\n argsObj: PollFactoryArgs['obj']['optInCost(uint64)uint64']\n argsTuple: PollFactoryArgs['tuple']['optInCost(uint64)uint64']\n returns: PollFactoryReturns['optInCost(uint64)uint64']\n }>\n & Record<'updateAkitaDAOEscrow(uint64)void' | 'updateAkitaDAOEscrow', {\n argsObj: PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void']\n argsTuple: PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']\n returns: PollFactoryReturns['updateAkitaDAOEscrow(uint64)void']\n }>\n & Record<'update(string)void' | 'update', {\n argsObj: PollFactoryArgs['obj']['update(string)void']\n argsTuple: PollFactoryArgs['tuple']['update(string)void']\n returns: PollFactoryReturns['update(string)void']\n }>\n & Record<'updateAkitaDAO(uint64)void' | 'updateAkitaDAO', {\n argsObj: PollFactoryArgs['obj']['updateAkitaDAO(uint64)void']\n argsTuple: PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']\n returns: PollFactoryReturns['updateAkitaDAO(uint64)void']\n }>\n & Record<'opUp()void' | 'opUp', {\n argsObj: PollFactoryArgs['obj']['opUp()void']\n argsTuple: PollFactoryArgs['tuple']['opUp()void']\n returns: PollFactoryReturns['opUp()void']\n }>\n /**\n * Defines the shape of the state of the application.\n */\n state: {\n global: {\n keys: {\n /**\n * the current version of the child contract\n */\n childContractVersion: string\n /**\n * the app ID for the akita DAO escrow to use\n */\n akitaDaoEscrow: bigint\n /**\n * the current version of the contract\n */\n version: string\n /**\n * the app ID of the Akita DAO\n */\n akitaDao: bigint\n }\n maps: {}\n }\n box: {\n keys: {\n boxedContract: BinaryState\n }\n maps: {}\n }\n }\n}\n\n/**\n * Defines the possible abi call signatures.\n */\nexport type PollFactorySignatures = keyof PollFactoryTypes['methods']\n/**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\nexport type PollFactoryNonVoidMethodSignatures = keyof PollFactoryTypes['methods'] extends infer T ? T extends keyof PollFactoryTypes['methods'] ? MethodReturn<T> extends void ? never : T : never : never\n/**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\nexport type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n>\n/**\n * Maps a method signature from the PollFactory smart contract to the method's arguments in either tuple or struct form\n */\nexport type MethodArgs<TSignature extends PollFactorySignatures> = PollFactoryTypes['methods'][TSignature]['argsObj' | 'argsTuple']\n/**\n * Maps a method signature from the PollFactory smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends PollFactorySignatures> = PollFactoryTypes['methods'][TSignature]['returns']\n\n/**\n * Defines the shape of the keyed global state of the application.\n */\nexport type GlobalKeysState = PollFactoryTypes['state']['global']['keys']\n\n/**\n * Defines the shape of the keyed box state of the application.\n */\nexport type BoxKeysState = PollFactoryTypes['state']['box']['keys']\n\n\n/**\n * Defines supported create method params for this smart contract\n */\nexport type PollFactoryCreateCallParams =\n | Expand<CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & {method: 'create'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n | Expand<CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & {method: 'create(string,string,uint64,uint64)void'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n/**\n * Defines supported update method params for this smart contract\n */\nexport type PollFactoryUpdateCallParams =\n | Expand<CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & {method: 'update'}>\n | Expand<CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & {method: 'update(string)void'}>\n/**\n * Defines arguments required for the deploy method.\n */\nexport type PollFactoryDeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {\n /**\n * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n createParams?: PollFactoryCreateCallParams\n /**\n * Update transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n updateParams?: PollFactoryUpdateCallParams\n}>\n\n\n/**\n * Exposes methods for constructing `AppClient` params objects for ABI calls to the PollFactory smart contract\n */\nexport abstract class PollFactoryParamsFactory {\n /**\n * Gets available create ABI call param factories\n */\n static get create() {\n return {\n _resolveByMethod<TParams extends PollFactoryCreateCallParams & {method: string}>(params: TParams) {\n switch(params.method) {\n case 'create':\n case 'create(string,string,uint64,uint64)void':\n return PollFactoryParamsFactory.create.create(params)\n }\n throw new Error(`Unknown ' + verb + ' method`)\n },\n\n /**\n * Constructs create ABI call params for the PollFactory smart contract using the create(string,string,uint64,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n create(params: CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC}): AppClientMethodCallParams & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC} {\n return {\n ...params,\n method: 'create(string,string,uint64,uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.version, params.args.childVersion, params.args.akitaDao, params.args.akitaDaoEscrow],\n }\n },\n }\n }\n\n /**\n * Gets available update ABI call param factories\n */\n static get update() {\n return {\n _resolveByMethod<TParams extends PollFactoryUpdateCallParams & {method: string}>(params: TParams) {\n switch(params.method) {\n case 'update':\n case 'update(string)void':\n return PollFactoryParamsFactory.update.update(params)\n }\n throw new Error(`Unknown ' + verb + ' method`)\n },\n\n /**\n * Constructs update ABI call params for the PollFactory smart contract using the update(string)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n update(params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams): AppClientMethodCallParams & AppClientCompilationParams {\n return {\n ...params,\n method: 'update(string)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.newVersion],\n }\n },\n }\n }\n\n /**\n * Constructs a no op call for the new(pay,uint8,uint64,uint64,string,string[],uint64)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static new(params: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'new(pay,uint8,uint64,uint64,string,string[],uint64)uint64' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.payment, params.args.type, params.args.endTime, params.args.maxSelected, params.args.question, params.args.options, params.args.gateId],\n }\n }\n /**\n * Constructs a no op call for the newPollCost()uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static newPollCost(params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'newPollCost()uint64' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n /**\n * Constructs a no op call for the initBoxedContract(string,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static initBoxedContract(params: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'initBoxedContract(string,uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.version, params.args.size],\n }\n }\n /**\n * Constructs a no op call for the loadBoxedContract(uint64,byte[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static loadBoxedContract(params: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'loadBoxedContract(uint64,byte[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.offset, params.args.data],\n }\n }\n /**\n * Constructs a no op call for the deleteBoxedContract()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static deleteBoxedContract(params: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'deleteBoxedContract()void' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n /**\n * Constructs a no op call for the optIn(pay,uint64)void ABI method\n *\n * optin tells the contract to opt into an asa\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static optIn(params: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'optIn(pay,uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.payment, params.args.asset],\n }\n }\n /**\n * Constructs a no op call for the optInCost(uint64)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static optInCost(params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'optInCost(uint64)uint64' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.asset],\n }\n }\n /**\n * Constructs a no op call for the updateAkitaDAOEscrow(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static updateAkitaDaoEscrow(params: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'updateAkitaDAOEscrow(uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.app],\n }\n }\n /**\n * Constructs a no op call for the updateAkitaDAO(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static updateAkitaDao(params: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'updateAkitaDAO(uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.akitaDao],\n }\n }\n /**\n * Constructs a no op call for the opUp()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static opUp(params: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'opUp()void' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n}\n\n/**\n * A factory to create and deploy one or more instance of the PollFactory smart contract and to create one or more app clients to interact with those (or other) app instances\n */\nexport class PollFactoryFactory {\n /**\n * The underlying `AppFactory` for when you want to have more flexibility\n */\n public readonly appFactory: _AppFactory\n\n /**\n * Creates a new instance of `PollFactoryFactory`\n *\n * @param params The parameters to initialise the app factory with\n */\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n })\n }\n \n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName\n }\n \n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC\n }\n \n /** A reference to the underlying `AlgorandClient` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand\n }\n \n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new PollFactoryClient(this.appFactory.getAppClientById(params))\n }\n \n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public async getAppClientByCreatorAndName(\n params: AppFactoryResolveAppClientByCreatorAndNameParams,\n ) {\n return new PollFactoryClient(await this.appFactory.getAppClientByCreatorAndName(params))\n }\n\n /**\n * Idempotently deploys the PollFactory smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public async deploy(params: PollFactoryDeployParams = {}) {\n const result = await this.appFactory.deploy({\n ...params,\n createParams: params.createParams?.method ? PollFactoryParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (PollFactoryCreateCallParams & { args: Uint8Array[] }) : undefined,\n updateParams: params.updateParams?.method ? PollFactoryParamsFactory.update._resolveByMethod(params.updateParams) : params.updateParams ? params.updateParams as (PollFactoryUpdateCallParams & { args: Uint8Array[] }) : undefined,\n })\n return { result: result.result, appClient: new PollFactoryClient(result.appClient) }\n }\n\n /**\n * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the PollFactory smart contract using the create(string,string,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create params\n */\n create: (params: CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.params.create(PollFactoryParamsFactory.create.create(params))\n },\n },\n\n /**\n * Gets available deployUpdate methods\n */\n deployUpdate: {\n /**\n * Updates an existing instance of the PollFactory smart contract using the update(string)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The deployUpdate params\n */\n update: (params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams) => {\n return this.appFactory.params.deployUpdate(PollFactoryParamsFactory.update.update(params))\n },\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the PollFactory smart contract using the create(string,string,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create transaction\n */\n create: (params: CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.createTransaction.create(PollFactoryParamsFactory.create.create(params))\n },\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the PollFactory smart contract using an ABI method call using the create(string,string,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create result\n */\n create: async (params: CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & AppClientCompilationParams & CreateSchema & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appFactory.send.create(PollFactoryParamsFactory.create.create(params))\n return { result: { ...result.result, return: result.result.return as unknown as (undefined | PollFactoryReturns['create(string,string,uint64,uint64)void']) }, appClient: new PollFactoryClient(result.appClient) }\n },\n },\n\n }\n\n}\n/**\n * A client to make calls to the PollFactory smart contract\n */\nexport class PollFactoryClient {\n /**\n * The underlying `AppClient` for when you want to have more flexibility\n */\n public readonly appClient: _AppClient\n\n /**\n * Creates a new instance of `PollFactoryClient`\n *\n * @param appClient An `AppClient` instance which has been created with the PollFactory app spec\n */\n constructor(appClient: _AppClient)\n /**\n * Creates a new instance of `PollFactoryClient`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends PollFactoryNonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {\n return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined\n }\n\n /**\n * Returns a new `PollFactoryClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<PollFactoryClient> {\n return new PollFactoryClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n \n /**\n * Returns an `PollFactoryClient` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<PollFactoryClient> {\n return new PollFactoryClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n \n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n \n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n \n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n \n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n \n /** A reference to the underlying `AlgorandClient` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand\n }\n\n /**\n * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available update methods\n */\n update: {\n /**\n * Updates an existing instance of the PollFactory smart contract using the `update(string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The update params\n */\n update: (params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams) => {\n return this.appClient.params.update(PollFactoryParamsFactory.update.update(params))\n },\n\n },\n\n /**\n * Makes a clear_state call to an existing instance of the PollFactory smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.params.bare.clearState(params)\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `new(pay,uint8,uint64,uint64,string,string[],uint64)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n new: (params: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.new(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `newPollCost()uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n newPollCost: (params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.newPollCost(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `initBoxedContract(string,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n initBoxedContract: (params: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.initBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `loadBoxedContract(uint64,byte[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n loadBoxedContract: (params: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.loadBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `deleteBoxedContract()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n deleteBoxedContract: (params: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.deleteBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n optIn: (params: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.optIn(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optInCost(uint64)uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n optInCost: (params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.optInCost(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAOEscrow(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n updateAkitaDaoEscrow: (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.updateAkitaDaoEscrow(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n updateAkitaDao: (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n opUp: (params: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.opUp(params))\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available update methods\n */\n update: {\n /**\n * Updates an existing instance of the PollFactory smart contract using the `update(string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The update transaction\n */\n update: (params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams) => {\n return this.appClient.createTransaction.update(PollFactoryParamsFactory.update.update(params))\n },\n\n },\n\n /**\n * Makes a clear_state call to an existing instance of the PollFactory smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.createTransaction.bare.clearState(params)\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `new(pay,uint8,uint64,uint64,string,string[],uint64)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n new: (params: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.new(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `newPollCost()uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n newPollCost: (params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.newPollCost(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `initBoxedContract(string,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n initBoxedContract: (params: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.initBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `loadBoxedContract(uint64,byte[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n loadBoxedContract: (params: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.loadBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `deleteBoxedContract()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n deleteBoxedContract: (params: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.deleteBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n optIn: (params: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.optIn(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optInCost(uint64)uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n optInCost: (params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.optInCost(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAOEscrow(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n updateAkitaDaoEscrow: (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.updateAkitaDaoEscrow(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n updateAkitaDao: (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n opUp: (params: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.opUp(params))\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available update methods\n */\n update: {\n /**\n * Updates an existing instance of the PollFactory smart contract using the `update(string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The update result\n */\n update: async (params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams & SendParams) => {\n const result = await this.appClient.send.update(PollFactoryParamsFactory.update.update(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['update(string)void'])}\n },\n\n },\n\n /**\n * Makes a clear_state call to an existing instance of the PollFactory smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams & SendParams>) => {\n return this.appClient.send.bare.clearState(params)\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `new(pay,uint8,uint64,uint64,string,string[],uint64)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n new: async (params: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.new(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `newPollCost()uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n newPollCost: async (params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.newPollCost(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['newPollCost()uint64'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `initBoxedContract(string,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n initBoxedContract: async (params: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.initBoxedContract(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['initBoxedContract(string,uint64)void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `loadBoxedContract(uint64,byte[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n loadBoxedContract: async (params: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.loadBoxedContract(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['loadBoxedContract(uint64,byte[])void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `deleteBoxedContract()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n deleteBoxedContract: async (params: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.deleteBoxedContract(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['deleteBoxedContract()void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n optIn: async (params: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.optIn(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['optIn(pay,uint64)void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optInCost(uint64)uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n optInCost: async (params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.optInCost(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['optInCost(uint64)uint64'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAOEscrow(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n updateAkitaDaoEscrow: async (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.updateAkitaDaoEscrow(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['updateAkitaDAOEscrow(uint64)void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n updateAkitaDao: async (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.updateAkitaDao(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['updateAkitaDAO(uint64)void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n opUp: async (params: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.opUp(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['opUp()void'])}\n },\n\n }\n\n /**\n * Clone this app client with different params\n *\n * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.\n * @returns A new app client with the altered params\n */\n public clone(params: CloneAppClientParams) {\n return new PollFactoryClient(this.appClient.clone(params))\n }\n\n /**\n * Makes a readonly (simulated) call to the PollFactory smart contract using the `newPollCost()uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async newPollCost(params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> = {args: []}) {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.newPollCost(params))\n return result.return as unknown as PollFactoryReturns['newPollCost()uint64']\n }\n\n /**\n * Makes a readonly (simulated) call to the PollFactory smart contract using the `optInCost(uint64)uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async optInCost(params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']>) {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.optInCost(params))\n return result.return as unknown as PollFactoryReturns['optInCost(uint64)uint64']\n }\n\n /**\n * Methods to access state for the current PollFactory app\n */\n state = {\n /**\n * Methods to access global state for the current PollFactory app\n */\n global: {\n /**\n * Get all current keyed values from global state\n */\n getAll: async (): Promise<Partial<Expand<GlobalKeysState>>> => {\n const result = await this.appClient.state.global.getAll()\n return {\n childContractVersion: result.childContractVersion,\n akitaDaoEscrow: result.akitaDAOEscrow,\n version: result.version,\n akitaDao: result.akitaDAO,\n }\n },\n /**\n * Get the current value of the childContractVersion key in global state\n */\n childContractVersion: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"childContractVersion\")) as string | undefined },\n /**\n * Get the current value of the akitaDAOEscrow key in global state\n */\n akitaDaoEscrow: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"akitaDAOEscrow\")) as bigint | undefined },\n /**\n * Get the current value of the version key in global state\n */\n version: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"version\")) as string | undefined },\n /**\n * Get the current value of the akitaDAO key in global state\n */\n akitaDao: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"akitaDAO\")) as bigint | undefined },\n },\n /**\n * Methods to access box state for the current PollFactory app\n */\n box: {\n /**\n * Get all current keyed values from box state\n */\n getAll: async (): Promise<Partial<Expand<BoxKeysState>>> => {\n const result = await this.appClient.state.box.getAll()\n return {\n boxedContract: new BinaryStateValue(result.boxedContract),\n }\n },\n /**\n * Get the current value of the boxedContract key in box state\n */\n boxedContract: async (): Promise<BinaryState> => { return new BinaryStateValue((await this.appClient.state.box.getValue(\"boxedContract\")) as Uint8Array | undefined) },\n },\n }\n\n public newGroup(): PollFactoryComposer {\n const client = this\n const composer = this.algorand.newGroup()\n let promiseChain:Promise<unknown> = Promise.resolve()\n const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []\n return {\n /**\n * Add a new(pay,uint8,uint64,uint64,string,string[],uint64)uint64 method call against the PollFactory contract\n */\n new(params: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.new(params)))\n resultMappers.push((v) => client.decodeReturnValue('new(pay,uint8,uint64,uint64,string,string[],uint64)uint64', v))\n return this\n },\n /**\n * Add a newPollCost()uint64 method call against the PollFactory contract\n */\n newPollCost(params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.newPollCost(params)))\n resultMappers.push((v) => client.decodeReturnValue('newPollCost()uint64', v))\n return this\n },\n /**\n * Add a initBoxedContract(string,uint64)void method call against the PollFactory contract\n */\n initBoxedContract(params: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.initBoxedContract(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a loadBoxedContract(uint64,byte[])void method call against the PollFactory contract\n */\n loadBoxedContract(params: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.loadBoxedContract(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a deleteBoxedContract()void method call against the PollFactory contract\n */\n deleteBoxedContract(params: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBoxedContract(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a optIn(pay,uint64)void method call against the PollFactory contract\n */\n optIn(params: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optIn(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a optInCost(uint64)uint64 method call against the PollFactory contract\n */\n optInCost(params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optInCost(params)))\n resultMappers.push((v) => client.decodeReturnValue('optInCost(uint64)uint64', v))\n return this\n },\n /**\n * Add a updateAkitaDAOEscrow(uint64)void method call against the PollFactory contract\n */\n updateAkitaDaoEscrow(params: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.updateAkitaDaoEscrow(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a updateAkitaDAO(uint64)void method call against the PollFactory contract\n */\n updateAkitaDao(params: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.updateAkitaDao(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a opUp()void method call against the PollFactory contract\n */\n opUp(params: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.opUp(params)))\n resultMappers.push(undefined)\n return this\n },\n get update() {\n return {\n update: (params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams) => {\n promiseChain = promiseChain.then(async () => composer.addAppUpdateMethodCall(await client.params.update.update(params)))\n resultMappers.push(undefined)\n return this\n },\n }\n },\n /**\n * Add a clear state call to the PollFactory contract\n */\n clearState(params: AppClientBareCallParams) {\n promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)))\n return this\n },\n addTransaction(txn: Transaction, signer?: TransactionSigner) {\n promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer))\n return this\n },\n async composer() {\n await promiseChain\n return composer\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain\n const result = await (!options ? composer.simulate() : composer.simulate(options))\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n },\n async send(params?: SendParams) {\n await promiseChain\n const result = await composer.send(params)\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n }\n } as unknown as PollFactoryComposer\n }\n}\nexport type PollFactoryComposer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the new(pay,uint8,uint64,uint64,string,string[],uint64)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n new(params?: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | undefined]>\n\n /**\n * Calls the newPollCost()uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n newPollCost(params?: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['newPollCost()uint64'] | undefined]>\n\n /**\n * Calls the initBoxedContract(string,uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n initBoxedContract(params?: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['initBoxedContract(string,uint64)void'] | undefined]>\n\n /**\n * Calls the loadBoxedContract(uint64,byte[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n loadBoxedContract(params?: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['loadBoxedContract(uint64,byte[])void'] | undefined]>\n\n /**\n * Calls the deleteBoxedContract()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n deleteBoxedContract(params?: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['deleteBoxedContract()void'] | undefined]>\n\n /**\n * Calls the optIn(pay,uint64)void ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n optIn(params?: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['optIn(pay,uint64)void'] | undefined]>\n\n /**\n * Calls the optInCost(uint64)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n optInCost(params?: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['optInCost(uint64)uint64'] | undefined]>\n\n /**\n * Calls the updateAkitaDAOEscrow(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n updateAkitaDaoEscrow(params?: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['updateAkitaDAOEscrow(uint64)void'] | undefined]>\n\n /**\n * Calls the updateAkitaDAO(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n updateAkitaDao(params?: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['updateAkitaDAO(uint64)void'] | undefined]>\n\n /**\n * Calls the opUp()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n opUp(params?: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['opUp()void'] | undefined]>\n\n /**\n * Gets available update methods\n */\n readonly update: {\n /**\n * Updates an existing instance of the PollFactory smart contract using the update(string)void ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n update(params?: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['update(string)void'] | undefined]>\n }\n\n /**\n * Makes a clear_state call to an existing instance of the PollFactory smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(params?: AppClientBareCallParams): PollFactoryComposer<[...TReturns, undefined]>\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn A transaction to add to the transaction group\n * @param signer The optional signer to use when signing this transaction.\n */\n addTransaction(txn: Transaction, signer?: TransactionSigner): PollFactoryComposer<TReturns>\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n composer(): Promise<TransactionComposer>\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(): Promise<PollFactoryComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: SkipSignaturesSimulateOptions): Promise<PollFactoryComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: RawSimulateOptions): Promise<PollFactoryComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n /**\n * Sends the transaction group to the network and returns the results\n */\n send(params?: SendParams): Promise<PollFactoryComposerResults<TReturns>>\n}\nexport type PollFactoryComposerResults<TReturns extends [...any[]]> = Expand<SendAtomicTransactionComposerResults & {\n returns: TReturns\n}>\n\n"]}
1
+ {"version":3,"sources":["/Users/kylebreeding/akita/akita-sc/projects/akita-sdk/dist/chunk-76JFN4TN.js","../src/poll/index.ts","../src/generated/PollClient.ts","../src/poll/types.ts","../src/poll/factory.ts","../src/generated/PollFactoryClient.ts"],"names":["PollTypeEnum","APP_SPEC","_AppFactory","_AppClient","getArc56ReturnValue","microAlgo"],"mappings":"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","file":"/Users/kylebreeding/akita/akita-sc/projects/akita-sdk/dist/chunk-76JFN4TN.js","sourcesContent":[null,"import { microAlgo } from \"@algorandfoundation/algokit-utils\";\nimport { BaseSDK } from \"../base\";\nimport {\n PollClient,\n PollFactory,\n} from '../generated/PollClient';\nimport { MaybeSigner, NewContractSDKParams } from \"../types\";\nimport {\n VoteParams,\n DeleteBoxesParams,\n HasVotedParams,\n PollState,\n VOTES_MBR,\n} from \"./types\";\n\nexport * from \"./factory\";\nexport * from \"./types\";\n\n/**\n * SDK for interacting with an individual Poll contract.\n * Use this to vote, check voting status, and manage poll cleanup.\n */\nexport class PollSDK extends BaseSDK<PollClient> {\n\n constructor(params: NewContractSDKParams) {\n super({ factory: PollFactory, ...params });\n }\n\n // ========== Read Methods ==========\n\n /**\n * Gets the current state of the poll.\n */\n async state(): Promise<PollState> {\n const state = await this.client.state.global.getAll();\n\n return {\n type: Number(state.type ?? 0),\n gateId: state.gateId ?? 0n,\n endTime: state.endTime ?? 0n,\n optionCount: state.optionCount ?? 0n,\n maxSelected: state.maxSelected ?? 0n,\n boxCount: state.boxCount ?? 0n,\n question: state.question ?? '',\n optionOne: state.optionOne ?? '',\n optionTwo: state.optionTwo ?? '',\n optionThree: state.optionThree ?? '',\n optionFour: state.optionFour ?? '',\n optionFive: state.optionFive ?? '',\n votesOne: state.votesOne ?? 0n,\n votesTwo: state.votesTwo ?? 0n,\n votesThree: state.votesThree ?? 0n,\n votesFour: state.votesFour ?? 0n,\n votesFive: state.votesFive ?? 0n,\n };\n }\n\n /**\n * Checks if the poll has ended.\n */\n async hasEnded(): Promise<boolean> {\n const pollState = await this.state();\n const now = BigInt(Math.floor(Date.now() / 1000));\n return now > pollState.endTime;\n }\n\n /**\n * Checks if a user has voted in the poll.\n */\n async hasVoted({ user }: HasVotedParams): Promise<boolean> {\n const hasVoted = await this.client.hasVoted({ args: { user } });\n return hasVoted ?? false;\n }\n\n /**\n * Gets the options as an array.\n */\n async getOptions(): Promise<string[]> {\n const pollState = await this.state();\n const options: string[] = [];\n \n if (pollState.optionCount >= 1n) options.push(pollState.optionOne);\n if (pollState.optionCount >= 2n) options.push(pollState.optionTwo);\n if (pollState.optionCount >= 3n) options.push(pollState.optionThree);\n if (pollState.optionCount >= 4n) options.push(pollState.optionFour);\n if (pollState.optionCount >= 5n) options.push(pollState.optionFive);\n \n return options;\n }\n\n /**\n * Gets the vote counts as an array.\n */\n async getVoteCounts(): Promise<bigint[]> {\n const pollState = await this.state();\n const votes: bigint[] = [];\n \n if (pollState.optionCount >= 1n) votes.push(pollState.votesOne);\n if (pollState.optionCount >= 2n) votes.push(pollState.votesTwo);\n if (pollState.optionCount >= 3n) votes.push(pollState.votesThree);\n if (pollState.optionCount >= 4n) votes.push(pollState.votesFour);\n if (pollState.optionCount >= 5n) votes.push(pollState.votesFive);\n \n return votes;\n }\n\n // ========== Write Methods ==========\n\n /**\n * Casts a vote in the poll.\n * Provide `gateTxn` for gated polls.\n * @param votes - Array of option indices (0-based) to vote for\n */\n async vote({ sender, signer, votes, gateTxn }: VoteParams): Promise<void> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n const mbrPayment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(VOTES_MBR),\n receiver: this.client.appAddress,\n });\n\n if (gateTxn) {\n await this.client.send.gatedVote({\n ...sendParams,\n args: {\n mbrPayment,\n gateTxn,\n votes,\n },\n });\n } else {\n await this.client.send.vote({\n ...sendParams,\n args: {\n mbrPayment,\n votes,\n },\n });\n }\n }\n\n /**\n * Deletes vote boxes and refunds MBR to voters.\n * Can only be called after the poll has ended.\n * @param addresses - Array of addresses to refund\n */\n async deleteBoxes({ sender, signer, addresses }: DeleteBoxesParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.deleteBoxes({\n ...sendParams,\n args: { addresses },\n });\n }\n}\n\n","/* eslint-disable */\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^7\n */\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\nimport { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport {\n AppClient as _AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n} from '@algorandfoundation/algokit-utils/types/app-client'\nimport { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\nimport { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n\nexport const APP_SPEC: Arc56Contract = {\"name\":\"Poll\",\"structs\":{},\"methods\":[{\"name\":\"create\",\"args\":[{\"type\":\"uint64\",\"name\":\"akitaDAO\"},{\"type\":\"uint8\",\"name\":\"type\"},{\"type\":\"uint64\",\"name\":\"endTime\"},{\"type\":\"uint64\",\"name\":\"maxSelected\"},{\"type\":\"string\",\"name\":\"question\"},{\"type\":\"string[]\",\"name\":\"options\"},{\"type\":\"uint64\",\"name\":\"gateID\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[\"NoOp\"],\"call\":[]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"deleteBoxes\",\"args\":[{\"type\":\"address[]\",\"name\":\"addresses\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"gatedVote\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"appl\",\"name\":\"gateTxn\"},{\"type\":\"uint64[]\",\"name\":\"votes\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"vote\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"uint64[]\",\"name\":\"votes\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"hasVoted\",\"args\":[{\"type\":\"address\",\"name\":\"user\"}],\"returns\":{\"type\":\"bool\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"events\":[],\"recommendations\":{}},{\"name\":\"updateAkitaDAO\",\"args\":[{\"type\":\"uint64\",\"name\":\"akitaDAO\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"opUp\",\"args\":[],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}}],\"arcs\":[22,28],\"networks\":{},\"state\":{\"schema\":{\"global\":{\"ints\":11,\"bytes\":8},\"local\":{\"ints\":0,\"bytes\":0}},\"keys\":{\"global\":{\"type\":{\"keyType\":\"AVMString\",\"valueType\":\"uint8\",\"key\":\"dHlwZQ==\",\"desc\":\"The type of poll: SingleChoice, MultipleChoice, SingleChoiceImpact or MultipleChoiceImpact\"},\"gateID\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"Z2F0ZV9pZA==\",\"desc\":\"the gate id to be used for filtering who can interact with this poll\"},\"endTime\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"ZW5kX3RpbWU=\",\"desc\":\"the time the poll ends as a unix timestamp\"},\"optionCount\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"b3B0aW9uX2NvdW50\",\"desc\":\"the number of options in the poll\"},\"maxSelected\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"bWF4X3NlbGVjdGVk\",\"desc\":\"the maximum number of selections in a multiple choice poll\"},\"boxCount\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"Ym94X2NvdW50\",\"desc\":\"the number of boxes created during the poll\"},\"question\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"cXVlc3Rpb24=\",\"desc\":\"the question being asked\"},\"optionOne\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"b3B0aW9uX29uZQ==\",\"desc\":\"the options and vote counts of the poll\"},\"optionTwo\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"b3B0aW9uX3R3bw==\"},\"optionThree\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"b3B0aW9uX3RocmVl\"},\"optionFour\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"b3B0aW9uX2ZvdXI=\"},\"optionFive\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"b3B0aW9uX2ZpdmU=\"},\"votesOne\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"dm90ZXNfb25l\",\"desc\":\"the number of votes for each option\"},\"votesTwo\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"dm90ZXNfdHdv\"},\"votesThree\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"dm90ZXNfdGhyZWU=\"},\"votesFour\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"dm90ZXNfZm91cg==\"},\"votesFive\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"dm90ZXNfZml2ZQ==\"},\"version\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"dmVyc2lvbg==\",\"desc\":\"the current version of the contract\"},\"akitaDAO\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"YWtpdGFfZGFv\",\"desc\":\"the app ID of the Akita DAO\"}},\"local\":{},\"box\":{}},\"maps\":{\"global\":{},\"local\":{},\"box\":{\"votes\":{\"keyType\":\"address\",\"valueType\":\"AVMBytes\",\"desc\":\"A map of addresses to empty bytes to track who has voted\",\"prefix\":\"\"}}}},\"bareActions\":{\"create\":[],\"call\":[]},\"sourceInfo\":{\"approval\":{\"sourceInfo\":[{\"pc\":[1189],\"errorMessage\":\"Bytes has valid prefix\"},{\"pc\":[316],\"errorMessage\":\"End time must be in the future\"},{\"pc\":[915],\"errorMessage\":\"Gate check failed\"},{\"pc\":[407],\"errorMessage\":\"Invalid maximum selection\"},{\"pc\":[371],\"errorMessage\":\"Invalid number of options, must be between 2 and 5\"},{\"pc\":[1228,1378],\"errorMessage\":\"Invalid number of vote args\"},{\"pc\":[931,1028],\"errorMessage\":\"Invalid payment\"},{\"pc\":[323],\"errorMessage\":\"Invalid poll type\"},{\"pc\":[822,1005],\"errorMessage\":\"Invalid vote args\"},{\"pc\":[1246,1417,1445],\"errorMessage\":\"Invalid vote option\"},{\"pc\":[310],\"errorMessage\":\"Must be deployed by an application\"},{\"pc\":[162],\"errorMessage\":\"OnCompletion must be NoOp\"},{\"pc\":[1097],\"errorMessage\":\"Only the Akita DAO can call this function\"},{\"pc\":[803,986],\"errorMessage\":\"Poll has ended\"},{\"pc\":[656],\"errorMessage\":\"Poll is still active\"},{\"pc\":[1012],\"errorMessage\":\"This has a gate\"},{\"pc\":[810,993],\"errorMessage\":\"User has already voted\"},{\"pc\":[685],\"errorMessage\":\"User has not voted\"},{\"pc\":[1095],\"errorMessage\":\"application exists\"},{\"pc\":[654,735,801,827,839,984,1010,1082,1117,1129,1141,1202,1214,1240,1253,1269,1291,1311,1332,1354,1376,1413,1461,1485,1505,1526,1548],\"errorMessage\":\"check GlobalState exists\"},{\"pc\":[435,469,505,548,590,680],\"errorMessage\":\"index access is out of bounds\"},{\"pc\":[794,977],\"errorMessage\":\"invalid number of bytes for (len+uint64[])\"},{\"pc\":[647],\"errorMessage\":\"invalid number of bytes for (len+uint8[32][])\"},{\"pc\":[287],\"errorMessage\":\"invalid number of bytes for (len+utf8[])\"},{\"pc\":[242,262,271,306,1074,1194],\"errorMessage\":\"invalid number of bytes for uint64\"},{\"pc\":[254],\"errorMessage\":\"invalid number of bytes for uint8\"},{\"pc\":[1049],\"errorMessage\":\"invalid number of bytes for uint8[32]\"},{\"pc\":[774],\"errorMessage\":\"transaction type is appl\"},{\"pc\":[763,957],\"errorMessage\":\"transaction type is pay\"}],\"pcOffsetMethod\":\"none\"},\"clear\":{\"sourceInfo\":[],\"pcOffsetMethod\":\"none\"}},\"source\":{\"approval\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgOCAxNTMwMAogICAgYnl0ZWNibG9jayAidm90ZXNfb25lIiAidm90ZXNfdHdvIiAidm90ZXNfdGhyZWUiICJ2b3Rlc19mb3VyIiAidm90ZXNfZml2ZSIgImFraXRhX2RhbyIgInR5cGUiICJib3hfY291bnQiICJlbmRfdGltZSIgImdhdGVfaWQiICJvcHRpb25fY291bnQiICJtYXhfc2VsZWN0ZWQiIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIHZvdGVzT25lID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlWb3Rlc09uZSB9KQogICAgYnl0ZWNfMCAvLyAidm90ZXNfb25lIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB2b3Rlc1R3byA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUd28gfSkKICAgIGJ5dGVjXzEgLy8gInZvdGVzX3R3byIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gdm90ZXNUaHJlZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUaHJlZSB9KQogICAgYnl0ZWNfMiAvLyAidm90ZXNfdGhyZWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIHZvdGVzRm91ciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNGb3VyIH0pCiAgICBieXRlY18zIC8vICJ2b3Rlc19mb3VyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyB2b3Rlc0ZpdmUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzRml2ZSB9KQogICAgYnl0ZWMgNCAvLyAidm90ZXNfZml2ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9sbCBleHRlbmRzIEFraXRhQmFzZUNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxMgogICAgcHVzaGJ5dGVzcyAweGUxNDE5MDgwIDB4NWJjZjkxMDAgMHhkZDMwOWM3YiAweDVhN2Y0OTMyIDB4MzNlOTJjOTQgMHg4NTRkZWRlMCAvLyBtZXRob2QgImRlbGV0ZUJveGVzKGFkZHJlc3NbXSl2b2lkIiwgbWV0aG9kICJnYXRlZFZvdGUocGF5LGFwcGwsdWludDY0W10pdm9pZCIsIG1ldGhvZCAidm90ZShwYXksdWludDY0W10pdm9pZCIsIG1ldGhvZCAiaGFzVm90ZWQoYWRkcmVzcylib29sIiwgbWV0aG9kICJ1cGRhdGVBa2l0YURBTyh1aW50NjQpdm9pZCIsIG1ldGhvZCAib3BVcCgpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGRlbGV0ZUJveGVzIGdhdGVkVm90ZSB2b3RlIGhhc1ZvdGVkIHVwZGF0ZUFraXRhREFPIG1haW5fb3BVcF9yb3V0ZUAxMAogICAgZXJyCgptYWluX29wVXBfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo0MwogICAgLy8gb3BVcCgpOiB2b2lkIHsgfQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVfTm9PcEAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb2xsIGV4dGVuZHMgQWtpdGFCYXNlQ29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4OWZhODM1YTggLy8gbWV0aG9kICJjcmVhdGUodWludDY0LHVpbnQ4LHVpbnQ2NCx1aW50NjQsc3RyaW5nLHN0cmluZ1tdLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlCiAgICBlcnIKCgovLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjpQb2xsLmNyZWF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE0NgogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE1NgogICAgLy8gYXNzZXJ0KEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkICE9PSAwLCBFUlJfQkFEX0RFUExPWUVSKQogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBNdXN0IGJlIGRlcGxveWVkIGJ5IGFuIGFwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE1NwogICAgLy8gYXNzZXJ0KEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgPCBlbmRUaW1lLCBFUlJfSU5WQUxJRF9FTkRfVElNRSkKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGRpZyA0CiAgICA8CiAgICBhc3NlcnQgLy8gRW5kIHRpbWUgbXVzdCBiZSBpbiB0aGUgZnV0dXJlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gYXNzZXJ0KHR5cGUuYXNVaW50NjQoKSA8IE11bHRpcGxlQ2hvaWNlSW1wYWN0LmFzVWludDY0KCksIEVSUl9JTlZBTElEX1BPTExfVFlQRSkKICAgIGRpZyA0CiAgICBidG9pCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICA8CiAgICBhc3NlcnQgLy8gSW52YWxpZCBwb2xsIHR5cGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWMgNSAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIHRoaXMuYWtpdGFEQU8udmFsdWUgPSBBcHBsaWNhdGlvbihha2l0YURBTykKICAgIHVuY292ZXIgNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIHR5cGUgPSBHbG9iYWxTdGF0ZTxVaW50OD4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVR5cGUgfSkKICAgIGJ5dGVjIDYgLy8gInR5cGUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gdGhpcy50eXBlLnZhbHVlID0gdHlwZQogICAgdW5jb3ZlciA1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gZ2F0ZUlEID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5R2F0ZUlEIH0pCiAgICBieXRlYyA5IC8vICJnYXRlX2lkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIHRoaXMuZ2F0ZUlELnZhbHVlID0gZ2F0ZUlECiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo2NwogICAgLy8gZW5kVGltZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleUVuZFRpbWUgfSkKICAgIGJ5dGVjIDggLy8gImVuZF90aW1lIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIHRoaXMuZW5kVGltZS52YWx1ZSA9IGVuZFRpbWUKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHF1ZXN0aW9uID0gR2xvYmFsU3RhdGU8c3RyaW5nPih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5UXVlc3Rpb24gfSkKICAgIHB1c2hieXRlcyAicXVlc3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE2NAogICAgLy8gdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHF1ZXN0aW9uCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNjYKICAgIC8vIGFzc2VydChvcHRpb25zLmxlbmd0aCA+PSAyICYmIG9wdGlvbnMubGVuZ3RoIDw9IDUsIEVSUl9JTlZBTElEX09QVElPTl9DT1VOVCkKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgPj0KICAgIGJ6IGNyZWF0ZV9ib29sX2ZhbHNlQDQKICAgIGR1cAogICAgcHVzaGludCA1IC8vIDUKICAgIDw9CiAgICBieiBjcmVhdGVfYm9vbF9mYWxzZUA0CiAgICBpbnRjXzEgLy8gMQoKY3JlYXRlX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQob3B0aW9ucy5sZW5ndGggPj0gMiAmJiBvcHRpb25zLmxlbmd0aCA8PSA1LCBFUlJfSU5WQUxJRF9PUFRJT05fQ09VTlQpCiAgICBhc3NlcnQgLy8gSW52YWxpZCBudW1iZXIgb2Ygb3B0aW9ucywgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTY4CiAgICAvLyBpZiAodHlwZSA9PT0gTXVsdGlwbGVDaG9pY2UgfHwgdHlwZSA9PT0gTXVsdGlwbGVDaG9pY2VJbXBhY3QpIHsKICAgIGRpZyAzCiAgICBwdXNoYnl0ZXMgMHgxNAogICAgPT0KICAgIGJueiBjcmVhdGVfaWZfYm9keUA3CiAgICBkaWcgMwogICAgcHVzaGJ5dGVzIDB4MjgKICAgID09CiAgICBieiBjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxMgoKY3JlYXRlX2lmX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyBhc3NlcnQobWF4U2VsZWN0ZWQgPj0gMiAmJiBtYXhTZWxlY3RlZCA8PSBvcHRpb25zLmxlbmd0aCAtIDEsIEVSUl9JTlZBTElEX01BWF9TRUxFQ1RJT04pCiAgICBkaWcgMgogICAgaW50Y18yIC8vIDIKICAgID49CiAgICBieiBjcmVhdGVfYm9vbF9mYWxzZUAxMAogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDMKICAgID49CiAgICBieiBjcmVhdGVfYm9vbF9mYWxzZUAxMAogICAgaW50Y18xIC8vIDEKCmNyZWF0ZV9ib29sX21lcmdlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIGFzc2VydChtYXhTZWxlY3RlZCA+PSAyICYmIG1heFNlbGVjdGVkIDw9IG9wdGlvbnMubGVuZ3RoIC0gMSwgRVJSX0lOVkFMSURfTUFYX1NFTEVDVElPTikKICAgIGFzc2VydCAvLyBJbnZhbGlkIG1heGltdW0gc2VsZWN0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBtYXhTZWxlY3RlZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleU1heFNlbGVjdGVkIH0pCiAgICBieXRlYyAxMSAvLyAibWF4X3NlbGVjdGVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNzAKICAgIC8vIHRoaXMubWF4U2VsZWN0ZWQudmFsdWUgPSBtYXhTZWxlY3RlZAogICAgZGlnIDMKICAgIGFwcF9nbG9iYWxfcHV0CgpjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIG9wdGlvbkNvdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5T3B0aW9uQ291bnQgfSkKICAgIGJ5dGVjIDEwIC8vICJvcHRpb25fY291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gdGhpcy5vcHRpb25Db3VudC52YWx1ZSA9IG9wdGlvbnMubGVuZ3RoCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gYm94Q291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlCb3hDb3VudCB9KQogICAgYnl0ZWMgNyAvLyAiYm94X2NvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIHRoaXMuYm94Q291bnQudmFsdWUgPSAwCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTc2CiAgICAvLyB0aGlzLm9wdGlvbk9uZS52YWx1ZSA9IG9wdGlvbnNbMF0KICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICBidXJ5IDcKICAgIGRpZyAxCiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NzcKICAgIC8vIG9wdGlvbk9uZSA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleU9wdGlvbk9uZSB9KQogICAgcHVzaGJ5dGVzICJvcHRpb25fb25lIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNzYKICAgIC8vIHRoaXMub3B0aW9uT25lLnZhbHVlID0gb3B0aW9uc1swXQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTc3CiAgICAvLyB0aGlzLm9wdGlvblR3by52YWx1ZSA9IG9wdGlvbnNbMV0KICAgIGludGNfMSAvLyAxCiAgICBkaWcgMgogICAgPAogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIG9wdGlvblR3byA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleU9wdGlvblR3byB9KQogICAgcHVzaGJ5dGVzICJvcHRpb25fdHdvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIHRoaXMub3B0aW9uVHdvLnZhbHVlID0gb3B0aW9uc1sxXQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBpZiAob3B0aW9ucy5sZW5ndGggPj0gMykgewogICAgcHVzaGludCAzIC8vIDMKICAgID49CiAgICBieiBjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxODAKICAgIC8vIHRoaXMub3B0aW9uVGhyZWUudmFsdWUgPSBvcHRpb25zWzJdCiAgICBpbnRjXzIgLy8gMgogICAgZGlnIDEKICAgIDwKICAgIGFzc2VydCAvLyBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDQKICAgIGR1cAogICAgcHVzaGludCA0IC8vIDQKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gb3B0aW9uVGhyZWUgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlPcHRpb25UaHJlZSB9KQogICAgcHVzaGJ5dGVzICJvcHRpb25fdGhyZWUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE4MAogICAgLy8gdGhpcy5vcHRpb25UaHJlZS52YWx1ZSA9IG9wdGlvbnNbMl0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyBpZiAob3B0aW9ucy5sZW5ndGggPj0gNCkgewogICAgZHVwCiAgICBwdXNoaW50IDQgLy8gNAogICAgPj0KICAgIGJ6IGNyZWF0ZV9hZnRlcl9pZl9lbHNlQDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gdGhpcy5vcHRpb25Gb3VyLnZhbHVlID0gb3B0aW9uc1szXQogICAgcHVzaGludCAzIC8vIDMKICAgIGRpZyAxCiAgICA8CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyA0CiAgICBkdXAKICAgIHB1c2hpbnQgNiAvLyA2CiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODAKICAgIC8vIG9wdGlvbkZvdXIgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlPcHRpb25Gb3VyIH0pCiAgICBwdXNoYnl0ZXMgIm9wdGlvbl9mb3VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIHRoaXMub3B0aW9uRm91ci52YWx1ZSA9IG9wdGlvbnNbM10KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyBpZiAob3B0aW9ucy5sZW5ndGggPj0gNSkgewogICAgZHVwCiAgICBwdXNoaW50IDUgLy8gNQogICAgPj0KICAgIGJ6IGNyZWF0ZV9hZnRlcl9pZl9lbHNlQDE4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE4OAogICAgLy8gdGhpcy5vcHRpb25GaXZlLnZhbHVlID0gb3B0aW9uc1s0XQogICAgcHVzaGludCA0IC8vIDQKICAgIGRpZyAxCiAgICA8CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyA0CiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODEKICAgIC8vIG9wdGlvbkZpdmUgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlPcHRpb25GaXZlIH0pCiAgICBwdXNoYnl0ZXMgIm9wdGlvbl9maXZlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxODgKICAgIC8vIHRoaXMub3B0aW9uRml2ZS52YWx1ZSA9IG9wdGlvbnNbNF0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTQ2CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlX2Jvb2xfZmFsc2VAMTA6CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVfYm9vbF9tZXJnZUAxMQoKY3JlYXRlX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZV9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjpQb2xsLmRlbGV0ZUJveGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKZGVsZXRlQm94ZXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE5MgogICAgLy8gZGVsZXRlQm94ZXMoYWRkcmVzc2VzOiBBY2NvdW50W10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbMzJdW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gYXNzZXJ0KEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgPiB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0FDVElWRSkKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBlbmRUaW1lID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5RW5kVGltZSB9KQogICAgYnl0ZWMgOCAvLyAiZW5kX3RpbWUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gYXNzZXJ0KEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgPiB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0FDVElWRSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA+CiAgICBhc3NlcnQgLy8gUG9sbCBpcyBzdGlsbCBhY3RpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKZGVsZXRlQm94ZXNfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE5NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogZGVsZXRlQm94ZXNfYWZ0ZXJfd2hpbGVANQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIGFzc2VydCh0aGlzLnZvdGVzKGFkZHJlc3Nlc1tpXSkuZXhpc3RzLCBFUlJfTk9UX1ZPVEVEKQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICAqCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gVXNlciBoYXMgbm90IHZvdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE5OAogICAgLy8gdGhpcy52b3RlcyhhZGRyZXNzZXNbaV0pLmRlbGV0ZSgpCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMDAtMjA2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogYWRkcmVzc2VzW2ldLAogICAgLy8gICAgIGFtb3VudDogdm90ZXNNQlIsCiAgICAvLyAgICAgbm90ZTogJ01CUiByZWZ1bmQgZm9yIHBvbGwgdm90ZScsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIG5vdGU6ICdNQlIgcmVmdW5kIGZvciBwb2xsIHZvdGUnLAogICAgcHVzaGJ5dGVzICJNQlIgcmVmdW5kIGZvciBwb2xsIHZvdGUiCiAgICBpdHhuX2ZpZWxkIE5vdGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjAzCiAgICAvLyBhbW91bnQ6IHZvdGVzTUJSLAogICAgaW50YyA0IC8vIDE1MzAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMDAtMjA1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogYWRkcmVzc2VzW2ldLAogICAgLy8gICAgIGFtb3VudDogdm90ZXNNQlIsCiAgICAvLyAgICAgbm90ZTogJ01CUiByZWZ1bmQgZm9yIHBvbGwgdm90ZScsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIwMC0yMDYKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBhZGRyZXNzZXNbaV0sCiAgICAvLyAgICAgYW1vdW50OiB2b3Rlc01CUiwKICAgIC8vICAgICBub3RlOiAnTUJSIHJlZnVuZCBmb3IgcG9sbCB2b3RlJywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIHRoaXMuYm94Q291bnQudmFsdWUgLT0gMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIGJveENvdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Qm94Q291bnQgfSkKICAgIGJ5dGVjIDcgLy8gImJveF9jb3VudCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjA4CiAgICAvLyB0aGlzLmJveENvdW50LnZhbHVlIC09IDEKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gYm94Q291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlCb3hDb3VudCB9KQogICAgYnl0ZWMgNyAvLyAiYm94X2NvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIHRoaXMuYm94Q291bnQudmFsdWUgLT0gMQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGRlbGV0ZUJveGVzX3doaWxlX3RvcEAyCgpkZWxldGVCb3hlc19hZnRlcl93aGlsZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxOTIKICAgIC8vIGRlbGV0ZUJveGVzKGFkZHJlc3NlczogQWNjb3VudFtdKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo6UG9sbC5nYXRlZFZvdGVbcm91dGluZ10oKSAtPiB2b2lkOgpnYXRlZFZvdGU6CiAgICBpbnRjXzAgLy8gMAogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIxNC0yMTgKICAgIC8vIGdhdGVkVm90ZSgKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBnYXRlVHhuOiBndHhuLkFwcGxpY2F0aW9uQ2FsbFR4biwKICAgIC8vICAgdm90ZXM6IHVpbnQ2NFtdCiAgICAvLyApOiB2b2lkIHsKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzIgLy8gMgogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGFwcGwKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICB1bmNvdmVyIDIKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50NjRbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBhc3NlcnQoR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA8PSB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0VOREVEKQogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIGVuZFRpbWUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlFbmRUaW1lIH0pCiAgICBieXRlYyA4IC8vICJlbmRfdGltZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBhc3NlcnQoR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA8PSB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0VOREVEKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIDw9CiAgICBhc3NlcnQgLy8gUG9sbCBoYXMgZW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIwCiAgICAvLyBhc3NlcnQoIXRoaXMudm90ZXMoVHhuLnNlbmRlcikuZXhpc3RzLCBFUlJfQUxSRUFEWV9WT1RFRCkKICAgIHR4biBTZW5kZXIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIFVzZXIgaGFzIGFscmVhZHkgdm90ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBhc3NlcnQodm90ZXMubGVuZ3RoIDw9IDUgJiYgdm90ZXMubGVuZ3RoID49IDEsIEVSUl9JTlZBTElEX1ZPVEUpCiAgICBwdXNoaW50IDUgLy8gNQogICAgPD0KICAgIGJ6IGdhdGVkVm90ZV9ib29sX2ZhbHNlQDQKICAgIGR1cAogICAgYnogZ2F0ZWRWb3RlX2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKCmdhdGVkVm90ZV9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gYXNzZXJ0KHZvdGVzLmxlbmd0aCA8PSA1ICYmIHZvdGVzLmxlbmd0aCA+PSAxLCBFUlJfSU5WQUxJRF9WT1RFKQogICAgYXNzZXJ0IC8vIEludmFsaWQgdm90ZSBhcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gYXNzZXJ0KGdhdGVDaGVjayhnYXRlVHhuLCB0aGlzLmFraXRhREFPLnZhbHVlLCBUeG4uc2VuZGVyLCB0aGlzLmdhdGVJRC52YWx1ZSksIEVSUl9GQUlMRURfR0FURSkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyOQogICAgLy8gYWtpdGFEQU8gPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFEQU8gfSkKICAgIGJ5dGVjIDUgLy8gImFraXRhX2RhbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBhc3NlcnQoZ2F0ZUNoZWNrKGdhdGVUeG4sIHRoaXMuYWtpdGFEQU8udmFsdWUsIFR4bi5zZW5kZXIsIHRoaXMuZ2F0ZUlELnZhbHVlKSwgRVJSX0ZBSUxFRF9HQVRFKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHR4biBTZW5kZXIKICAgIGJ1cnkgNwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIGdhdGVJRCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleUdhdGVJRCB9KQogICAgYnl0ZWMgOSAvLyAiZ2F0ZV9pZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBhc3NlcnQoZ2F0ZUNoZWNrKGdhdGVUeG4sIHRoaXMuYWtpdGFEQU8udmFsdWUsIFR4bi5zZW5kZXIsIHRoaXMuZ2F0ZUlELnZhbHVlKSwgRVJSX0ZBSUxFRF9HQVRFKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGJ1cnkgNwogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czoyMzMKICAgIC8vIGdhdGVUeG4uYXBwSWQgPT09IEFwcGxpY2F0aW9uKGdldEFraXRhQXBwTGlzdChha2l0YURBTykuZ2F0ZSkgJiYKICAgIGRpZyAzCiAgICBndHhucyBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjQ0CiAgICAvLyBjb25zdCBbYXBwTGlzdEJ5dGVzXSA9IG9wLkFwcEdsb2JhbC5nZXRFeEJ5dGVzKGFraXRhREFPLCBCeXRlcyhBa2l0YURBT0dsb2JhbFN0YXRlS2V5c0FraXRhQXBwTGlzdCkpCiAgICBzd2FwCiAgICBwdXNoYnl0ZXMgImFhbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjMzCiAgICAvLyBnYXRlVHhuLmFwcElkID09PSBBcHBsaWNhdGlvbihnZXRBa2l0YUFwcExpc3QoYWtpdGFEQU8pLmdhdGUpICYmCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjMzLTIzNAogICAgLy8gZ2F0ZVR4bi5hcHBJZCA9PT0gQXBwbGljYXRpb24oZ2V0QWtpdGFBcHBMaXN0KGFraXRhREFPKS5nYXRlKSAmJgogICAgLy8gZ2F0ZVR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcCAmJgogICAgYnogZ2F0ZWRWb3RlX2Jvb2xfZmFsc2VAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjM0CiAgICAvLyBnYXRlVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wICYmCiAgICBkaWcgMgogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjIzMy0yMzQKICAgIC8vIGdhdGVUeG4uYXBwSWQgPT09IEFwcGxpY2F0aW9uKGdldEFraXRhQXBwTGlzdChha2l0YURBTykuZ2F0ZSkgJiYKICAgIC8vIGdhdGVUeG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AgJiYKICAgIGJueiBnYXRlZFZvdGVfYm9vbF9mYWxzZUAxMwogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czoyMzUKICAgIC8vIGdhdGVUeG4ubnVtQXBwQXJncyA9PT0gNCAmJgogICAgZGlnIDIKICAgIGd0eG5zIE51bUFwcEFyZ3MKICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czoyMzMtMjM1CiAgICAvLyBnYXRlVHhuLmFwcElkID09PSBBcHBsaWNhdGlvbihnZXRBa2l0YUFwcExpc3QoYWtpdGFEQU8pLmdhdGUpICYmCiAgICAvLyBnYXRlVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wICYmCiAgICAvLyBnYXRlVHhuLm51bUFwcEFyZ3MgPT09IDQgJiYKICAgIGJ6IGdhdGVkVm90ZV9ib29sX2ZhbHNlQDEzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjIzNgogICAgLy8gZ2F0ZVR4bi5hcHBBcmdzKDApID09PSBtZXRob2RTZWxlY3Rvcjx0eXBlb2YgR2F0ZS5wcm90b3R5cGUubXVzdENoZWNrPigpICYmCiAgICBkaWcgMgogICAgaW50Y18wIC8vIDAKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoYnl0ZXMgMHg0MzkyMjY1NSAvLyBtZXRob2QgIm11c3RDaGVjayhhZGRyZXNzLHVpbnQ2NCxieXRlW11bXSl2b2lkIgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjMzLTIzNgogICAgLy8gZ2F0ZVR4bi5hcHBJZCA9PT0gQXBwbGljYXRpb24oZ2V0QWtpdGFBcHBMaXN0KGFraXRhREFPKS5nYXRlKSAmJgogICAgLy8gZ2F0ZVR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcCAmJgogICAgLy8gZ2F0ZVR4bi5udW1BcHBBcmdzID09PSA0ICYmCiAgICAvLyBnYXRlVHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yPHR5cGVvZiBHYXRlLnByb3RvdHlwZS5tdXN0Q2hlY2s+KCkgJiYKICAgIGJ6IGdhdGVkVm90ZV9ib29sX2ZhbHNlQDEzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjIzNwogICAgLy8gZ2F0ZVR4bi5hcHBBcmdzKDEpID09PSBuZXcgQWRkcmVzcyhjYWxsZXIpLmJ5dGVzICYmCiAgICBkaWcgMgogICAgaW50Y18xIC8vIDEKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgNgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjMzLTIzNwogICAgLy8gZ2F0ZVR4bi5hcHBJZCA9PT0gQXBwbGljYXRpb24oZ2V0QWtpdGFBcHBMaXN0KGFraXRhREFPKS5nYXRlKSAmJgogICAgLy8gZ2F0ZVR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcCAmJgogICAgLy8gZ2F0ZVR4bi5udW1BcHBBcmdzID09PSA0ICYmCiAgICAvLyBnYXRlVHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yPHR5cGVvZiBHYXRlLnByb3RvdHlwZS5tdXN0Q2hlY2s+KCkgJiYKICAgIC8vIGdhdGVUeG4uYXBwQXJncygxKSA9PT0gbmV3IEFkZHJlc3MoY2FsbGVyKS5ieXRlcyAmJgogICAgYnogZ2F0ZWRWb3RlX2Jvb2xfZmFsc2VAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjM4CiAgICAvLyBnYXRlVHhuLmFwcEFyZ3MoMikgPT09IGl0b2IoaWQpCiAgICBkaWcgMgogICAgaW50Y18yIC8vIDIKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgNQogICAgaXRvYgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6MjMzLTIzOAogICAgLy8gZ2F0ZVR4bi5hcHBJZCA9PT0gQXBwbGljYXRpb24oZ2V0QWtpdGFBcHBMaXN0KGFraXRhREFPKS5nYXRlKSAmJgogICAgLy8gZ2F0ZVR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcCAmJgogICAgLy8gZ2F0ZVR4bi5udW1BcHBBcmdzID09PSA0ICYmCiAgICAvLyBnYXRlVHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yPHR5cGVvZiBHYXRlLnByb3RvdHlwZS5tdXN0Q2hlY2s+KCkgJiYKICAgIC8vIGdhdGVUeG4uYXBwQXJncygxKSA9PT0gbmV3IEFkZHJlc3MoY2FsbGVyKS5ieXRlcyAmJgogICAgLy8gZ2F0ZVR4bi5hcHBBcmdzKDIpID09PSBpdG9iKGlkKQogICAgYnogZ2F0ZWRWb3RlX2Jvb2xfZmFsc2VAMTMKICAgIGludGNfMSAvLyAxCgpnYXRlZFZvdGVfYm9vbF9tZXJnZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBhc3NlcnQoZ2F0ZUNoZWNrKGdhdGVUeG4sIHRoaXMuYWtpdGFEQU8udmFsdWUsIFR4bi5zZW5kZXIsIHRoaXMuZ2F0ZUlELnZhbHVlKSwgRVJSX0ZBSUxFRF9HQVRFKQogICAgYXNzZXJ0IC8vIEdhdGUgY2hlY2sgZmFpbGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIyMy0yMzAKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBtYnJQYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdm90ZXNNQlIsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIzLTIzMAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB2b3Rlc01CUiwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMjcKICAgIC8vIGFtb3VudDogdm90ZXNNQlIsCiAgICBpbnRjIDQgLy8gMTUzMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjIzLTIzMAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB2b3Rlc01CUiwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gSW52YWxpZCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gdGhpcy5jcmVhdGVWb3RlKHZvdGVzKQogICAgZGlnIDEKICAgIGNhbGxzdWIgY3JlYXRlVm90ZQogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIxNC0yMTgKICAgIC8vIGdhdGVkVm90ZSgKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBnYXRlVHhuOiBndHhuLkFwcGxpY2F0aW9uQ2FsbFR4biwKICAgIC8vICAgdm90ZXM6IHVpbnQ2NFtdCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdhdGVkVm90ZV9ib29sX2ZhbHNlQDEzOgogICAgaW50Y18wIC8vIDAKICAgIGIgZ2F0ZWRWb3RlX2Jvb2xfbWVyZ2VAMTQKCmdhdGVkVm90ZV9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzAgLy8gMAogICAgYiBnYXRlZFZvdGVfYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo6UG9sbC52b3RlW3JvdXRpbmddKCkgLT4gdm9pZDoKdm90ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyB2b3RlKG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwgdm90ZXM6IHVpbnQ2NFtdKTogdm9pZCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICB1bmNvdmVyIDIKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50NjRbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBhc3NlcnQoR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA8PSB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0VOREVEKQogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIGVuZFRpbWUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlFbmRUaW1lIH0pCiAgICBieXRlYyA4IC8vICJlbmRfdGltZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyBhc3NlcnQoR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCA8PSB0aGlzLmVuZFRpbWUudmFsdWUsIEVSUl9QT0xMX0VOREVEKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIDw9CiAgICBhc3NlcnQgLy8gUG9sbCBoYXMgZW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM3CiAgICAvLyBhc3NlcnQoIXRoaXMudm90ZXMoVHhuLnNlbmRlcikuZXhpc3RzLCBFUlJfQUxSRUFEWV9WT1RFRCkKICAgIHR4biBTZW5kZXIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIFVzZXIgaGFzIGFscmVhZHkgdm90ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBhc3NlcnQodm90ZXMubGVuZ3RoIDw9IDUgJiYgdm90ZXMubGVuZ3RoID49IDEsIEVSUl9JTlZBTElEX1ZPVEUpCiAgICBwdXNoaW50IDUgLy8gNQogICAgPD0KICAgIGJ6IHZvdGVfYm9vbF9mYWxzZUA0CiAgICBkdXAKICAgIGJ6IHZvdGVfYm9vbF9mYWxzZUA0CiAgICBpbnRjXzEgLy8gMQoKdm90ZV9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIzOAogICAgLy8gYXNzZXJ0KHZvdGVzLmxlbmd0aCA8PSA1ICYmIHZvdGVzLmxlbmd0aCA+PSAxLCBFUlJfSU5WQUxJRF9WT1RFKQogICAgYXNzZXJ0IC8vIEludmFsaWQgdm90ZSBhcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gYXNzZXJ0KHRoaXMuZ2F0ZUlELnZhbHVlID09PSAwLCBFUlJfSEFTX0dBVEUpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gZ2F0ZUlEID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5R2F0ZUlEIH0pCiAgICBieXRlYyA5IC8vICJnYXRlX2lkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyMzkKICAgIC8vIGFzc2VydCh0aGlzLmdhdGVJRC52YWx1ZSA9PT0gMCwgRVJSX0hBU19HQVRFKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBUaGlzIGhhcyBhIGdhdGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjQwLTI0NwogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB2b3Rlc01CUiwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDIKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjQzCiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyNDAtMjQ3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHZvdGVzTUJSLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjI0NAogICAgLy8gYW1vdW50OiB2b3Rlc01CUiwKICAgIGludGMgNCAvLyAxNTMwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyNDAtMjQ3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHZvdGVzTUJSLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBJbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyB0aGlzLmNyZWF0ZVZvdGUodm90ZXMpCiAgICBkaWcgMQogICAgY2FsbHN1YiBjcmVhdGVWb3RlCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyB2b3RlKG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwgdm90ZXM6IHVpbnQ2NFtdKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgp2b3RlX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIHZvdGVfYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo6UG9sbC5oYXNWb3RlZFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cmhhc1ZvdGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyNTIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIHJldHVybiB0aGlzLnZvdGVzKHVzZXIpLmV4aXN0cwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlYyAxMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjpBa2l0YUJhc2VDb250cmFjdC51cGRhdGVBa2l0YURBT1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZUFraXRhREFPOgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzgKICAgIC8vIHVwZGF0ZUFraXRhREFPKGFraXRhREFPOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjM5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWMgNSAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hieXRlcyAid2FsbGV0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmdldEFraXRhREFPV2FsbGV0KCkuYWRkcmVzcywgRVJSX05PVF9BS0lUQV9EQU8pCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgdGhlIEFraXRhIERBTyBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyOQogICAgLy8gYWtpdGFEQU8gPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFEQU8gfSkKICAgIGJ5dGVjIDUgLy8gImFraXRhX2RhbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjQwCiAgICAvLyB0aGlzLmFraXRhREFPLnZhbHVlID0gYWtpdGFEQU8KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czozOAogICAgLy8gdXBkYXRlQWtpdGFEQU8oYWtpdGFEQU86IEFwcGxpY2F0aW9uKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo6UG9sbC5jcmVhdGVWb3RlKHZvdGVzOiBieXRlcykgLT4gYnl0ZXM6CmNyZWF0ZVZvdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjk2CiAgICAvLyBwcml2YXRlIGNyZWF0ZVZvdGUodm90ZXM6IHVpbnQ2NFtdKTogdm9pZCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo5NwogICAgLy8gbGV0IGltcGFjdDogdWludDY0ID0gMQogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6OTgKICAgIC8vIGlmICh0aGlzLnR5cGUudmFsdWUgPT09IFNpbmdsZUNob2ljZUltcGFjdCB8fCB0aGlzLnR5cGUudmFsdWUgPT09IE11bHRpcGxlQ2hvaWNlSW1wYWN0KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdHlwZSA9IEdsb2JhbFN0YXRlPFVpbnQ4Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5VHlwZSB9KQogICAgYnl0ZWMgNiAvLyAidHlwZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6OTgKICAgIC8vIGlmICh0aGlzLnR5cGUudmFsdWUgPT09IFNpbmdsZUNob2ljZUltcGFjdCB8fCB0aGlzLnR5cGUudmFsdWUgPT09IE11bHRpcGxlQ2hvaWNlSW1wYWN0KSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcHVzaGJ5dGVzIDB4MWUKICAgID09CiAgICBibnogY3JlYXRlVm90ZV9pZl9ib2R5QDIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0eXBlID0gR2xvYmFsU3RhdGU8VWludDg+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlUeXBlIH0pCiAgICBieXRlYyA2IC8vICJ0eXBlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo5OAogICAgLy8gaWYgKHRoaXMudHlwZS52YWx1ZSA9PT0gU2luZ2xlQ2hvaWNlSW1wYWN0IHx8IHRoaXMudHlwZS52YWx1ZSA9PT0gTXVsdGlwbGVDaG9pY2VJbXBhY3QpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBwdXNoYnl0ZXMgMHgyOAogICAgPT0KICAgIGJ6IGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUAzCgpjcmVhdGVWb3RlX2lmX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIGltcGFjdCA9IGdldFVzZXJJbXBhY3QodGhpcy5ha2l0YURBTy52YWx1ZSwgVHhuLnNlbmRlcikKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyOQogICAgLy8gYWtpdGFEQU8gPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFEQU8gfSkKICAgIGJ5dGVjIDUgLy8gImFraXRhX2RhbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIGltcGFjdCA9IGdldFVzZXJJbXBhY3QodGhpcy5ha2l0YURBTy52YWx1ZSwgVHhuLnNlbmRlcikKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjEzNi0xMzkKICAgIC8vIHJldHVybiBhYmlDYWxsPHR5cGVvZiBBa2l0YVNvY2lhbEltcGFjdC5wcm90b3R5cGUuZ2V0VXNlckltcGFjdD4oewogICAgLy8gICBhcHBJZDogZ2V0QWtpdGFTb2NpYWxBcHBMaXN0KGFraXRhREFPKS5pbXBhY3QsCiAgICAvLyAgIGFyZ3M6IFthY2NvdW50XQogICAgLy8gfSkucmV0dXJuVmFsdWUKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6NDkKICAgIC8vIGNvbnN0IFthcHBMaXN0Qnl0ZXNdID0gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMoYWtpdGFEQU8sIEJ5dGVzKEFraXRhREFPR2xvYmFsU3RhdGVLZXlzQWtpdGFTb2NpYWxBcHBMaXN0KSkKICAgIHN3YXAKICAgIHB1c2hieXRlcyAic2FsIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czoxMzcKICAgIC8vIGFwcElkOiBnZXRBa2l0YVNvY2lhbEFwcExpc3QoYWtpdGFEQU8pLmltcGFjdCwKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjEzNi0xMzkKICAgIC8vIHJldHVybiBhYmlDYWxsPHR5cGVvZiBBa2l0YVNvY2lhbEltcGFjdC5wcm90b3R5cGUuZ2V0VXNlckltcGFjdD4oewogICAgLy8gICBhcHBJZDogZ2V0QWtpdGFTb2NpYWxBcHBMaXN0KGFraXRhREFPKS5pbXBhY3QsCiAgICAvLyAgIGFyZ3M6IFthY2NvdW50XQogICAgLy8gfSkucmV0dXJuVmFsdWUKICAgIHB1c2hieXRlcyAweGQ1NzRiYjEwIC8vIG1ldGhvZCAiZ2V0VXNlckltcGFjdChhZGRyZXNzKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWMgMTIgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZnJhbWVfYnVyeSA3CgpjcmVhdGVWb3RlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBpZiAodGhpcy50eXBlLnZhbHVlID09PSBTaW5nbGVDaG9pY2UgfHwgdGhpcy50eXBlLnZhbHVlID09PSBTaW5nbGVDaG9pY2VJbXBhY3QpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0eXBlID0gR2xvYmFsU3RhdGU8VWludDg+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlUeXBlIH0pCiAgICBieXRlYyA2IC8vICJ0eXBlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIGlmICh0aGlzLnR5cGUudmFsdWUgPT09IFNpbmdsZUNob2ljZSB8fCB0aGlzLnR5cGUudmFsdWUgPT09IFNpbmdsZUNob2ljZUltcGFjdCkgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hieXRlcyAweDBhCiAgICA9PQogICAgYm56IGNyZWF0ZVZvdGVfaWZfYm9keUA1CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdHlwZSA9IEdsb2JhbFN0YXRlPFVpbnQ4Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5VHlwZSB9KQogICAgYnl0ZWMgNiAvLyAidHlwZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBpZiAodGhpcy50eXBlLnZhbHVlID09PSBTaW5nbGVDaG9pY2UgfHwgdGhpcy50eXBlLnZhbHVlID09PSBTaW5nbGVDaG9pY2VJbXBhY3QpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBwdXNoYnl0ZXMgMHgxZQogICAgPT0KICAgIGJ6IGNyZWF0ZVZvdGVfZWxzZV9ib2R5QDIwCgpjcmVhdGVWb3RlX2lmX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyBhc3NlcnQodm90ZXMubGVuZ3RoID09PSAxLCBFUlJfSU5WQUxJRF9WT1RFX0NPVU5UKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIEludmFsaWQgbnVtYmVyIG9mIHZvdGUgYXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIGFzc2VydCh2b3Rlc1swXSA8PSB0aGlzLm9wdGlvbkNvdW50LnZhbHVlIC0gMSwgRVJSX0lOVkFMSURfVk9URV9PUFRJT04pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBvcHRpb25Db3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleU9wdGlvbkNvdW50IH0pCiAgICBieXRlYyAxMCAvLyAib3B0aW9uX2NvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMDQKICAgIC8vIGFzc2VydCh2b3Rlc1swXSA8PSB0aGlzLm9wdGlvbkNvdW50LnZhbHVlIC0gMSwgRVJSX0lOVkFMSURfVk9URV9PUFRJT04pCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICA+PQogICAgYXNzZXJ0IC8vIEludmFsaWQgdm90ZSBvcHRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyBpZiAodm90ZXNbMF0gPT09IDApIHsKICAgIGJueiBjcmVhdGVWb3RlX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEwNwogICAgLy8gdGhpcy52b3Rlc09uZS52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB2b3Rlc09uZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNPbmUgfSkKICAgIGJ5dGVjXzAgLy8gInZvdGVzX29uZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyB0aGlzLnZvdGVzT25lLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB2b3Rlc09uZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNPbmUgfSkKICAgIGJ5dGVjXzAgLy8gInZvdGVzX29uZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyB0aGlzLnZvdGVzT25lLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCmNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUA0MToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnZvdGVzKFR4bi5zZW5kZXIpLmNyZWF0ZSgpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gdGhpcy5ib3hDb3VudC52YWx1ZSArPSAxCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gYm94Q291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlCb3hDb3VudCB9KQogICAgYnl0ZWMgNyAvLyAiYm94X2NvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIHRoaXMuYm94Q291bnQudmFsdWUgKz0gMQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBib3hDb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleUJveENvdW50IH0pCiAgICBieXRlYyA3IC8vICJib3hfY291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gdGhpcy5ib3hDb3VudC52YWx1ZSArPSAxCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKY3JlYXRlVm90ZV9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyB9IGVsc2UgaWYgKHZvdGVzWzBdID09PSAxKSB7CiAgICBmcmFtZV9kaWcgNQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBjcmVhdGVWb3RlX2Vsc2VfYm9keUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEwOQogICAgLy8gdGhpcy52b3Rlc1R3by52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB2b3Rlc1R3byA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUd28gfSkKICAgIGJ5dGVjXzEgLy8gInZvdGVzX3R3byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyB0aGlzLnZvdGVzVHdvLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB2b3Rlc1R3byA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUd28gfSkKICAgIGJ5dGVjXzEgLy8gInZvdGVzX3R3byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyB0aGlzLnZvdGVzVHdvLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgY3JlYXRlVm90ZV9hZnRlcl9pZl9lbHNlQDQxCgpjcmVhdGVWb3RlX2Vsc2VfYm9keUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTAKICAgIC8vIH0gZWxzZSBpZiAodm90ZXNbMF0gPT09IDIpIHsKICAgIGZyYW1lX2RpZyA1CiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGJ6IGNyZWF0ZVZvdGVfZWxzZV9ib2R5QDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gdGhpcy52b3Rlc1RocmVlLnZhbHVlICs9IGltcGFjdAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHZvdGVzVGhyZWUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzVGhyZWUgfSkKICAgIGJ5dGVjXzIgLy8gInZvdGVzX3RocmVlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIHRoaXMudm90ZXNUaHJlZS52YWx1ZSArPSBpbXBhY3QKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgNwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gdm90ZXNUaHJlZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUaHJlZSB9KQogICAgYnl0ZWNfMiAvLyAidm90ZXNfdGhyZWUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gdGhpcy52b3Rlc1RocmVlLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgY3JlYXRlVm90ZV9hZnRlcl9pZl9lbHNlQDQxCgpjcmVhdGVWb3RlX2Vsc2VfYm9keUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTEyCiAgICAvLyB9IGVsc2UgaWYgKHZvdGVzWzBdID09PSAzKSB7CiAgICBmcmFtZV9kaWcgNQogICAgcHVzaGludCAzIC8vIDMKICAgID09CiAgICBieiBjcmVhdGVWb3RlX2Vsc2VfYm9keUAxMwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIHRoaXMudm90ZXNGb3VyLnZhbHVlICs9IGltcGFjdAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIHZvdGVzRm91ciA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNGb3VyIH0pCiAgICBieXRlY18zIC8vICJ2b3Rlc19mb3VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIHRoaXMudm90ZXNGb3VyLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg2CiAgICAvLyB2b3Rlc0ZvdXIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzRm91ciB9KQogICAgYnl0ZWNfMyAvLyAidm90ZXNfZm91ciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyB0aGlzLnZvdGVzRm91ci52YWx1ZSArPSBpbXBhY3QKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUA0MQoKY3JlYXRlVm90ZV9lbHNlX2JvZHlAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gfSBlbHNlIGlmICh2b3Rlc1swXSA9PT0gNCkgewogICAgZnJhbWVfZGlnIDUKICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYnogY3JlYXRlVm90ZV9hZnRlcl9pZl9lbHNlQDQxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gdGhpcy52b3Rlc0ZpdmUudmFsdWUgKz0gaW1wYWN0CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gdm90ZXNGaXZlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlWb3Rlc0ZpdmUgfSkKICAgIGJ5dGVjIDQgLy8gInZvdGVzX2ZpdmUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gdGhpcy52b3Rlc0ZpdmUudmFsdWUgKz0gaW1wYWN0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDcKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIHZvdGVzRml2ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNGaXZlIH0pCiAgICBieXRlYyA0IC8vICJ2b3Rlc19maXZlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTUKICAgIC8vIHRoaXMudm90ZXNGaXZlLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgY3JlYXRlVm90ZV9hZnRlcl9pZl9lbHNlQDQxCgpjcmVhdGVWb3RlX2Vsc2VfYm9keUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQodm90ZXMubGVuZ3RoIDw9IHRoaXMubWF4U2VsZWN0ZWQudmFsdWUsIEVSUl9JTlZBTElEX1ZPVEVfQ09VTlQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBtYXhTZWxlY3RlZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleU1heFNlbGVjdGVkIH0pCiAgICBieXRlYyAxMSAvLyAibWF4X3NlbGVjdGVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydCh2b3Rlcy5sZW5ndGggPD0gdGhpcy5tYXhTZWxlY3RlZC52YWx1ZSwgRVJSX0lOVkFMSURfVk9URV9DT1VOVCkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8PQogICAgYXNzZXJ0IC8vIEludmFsaWQgbnVtYmVyIG9mIHZvdGUgYXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCB2b3Rlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMgoKY3JlYXRlVm90ZV93aGlsZV90b3BAMjE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyMAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IHZvdGVzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUA0MQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjEKICAgIC8vIGFzc2VydCh2b3Rlc1tpXSA8PSB0aGlzLm9wdGlvbkNvdW50LnZhbHVlIC0gMSwgRVJSX0lOVkFMSURfVk9URV9PUFRJT04pCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIG9wdGlvbkNvdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogUG9sbEdsb2JhbFN0YXRlS2V5T3B0aW9uQ291bnQgfSkKICAgIGJ5dGVjIDEwIC8vICJvcHRpb25fY291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gYXNzZXJ0KHZvdGVzW2ldIDw9IHRoaXMub3B0aW9uQ291bnQudmFsdWUgLSAxLCBFUlJfSU5WQUxJRF9WT1RFX09QVElPTikKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgPD0KICAgIGFzc2VydCAvLyBJbnZhbGlkIHZvdGUgb3B0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gZm9yIChsZXQgajogdWludDY0ID0gaSArIDE7IGogPCB2b3Rlcy5sZW5ndGg7IGogKz0gMSkgewogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICBmcmFtZV9idXJ5IDQKCmNyZWF0ZVZvdGVfd2hpbGVfdG9wQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGZvciAobGV0IGo6IHVpbnQ2NCA9IGkgKyAxOyBqIDwgdm90ZXMubGVuZ3RoOyBqICs9IDEpIHsKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogY3JlYXRlVm90ZV9hZnRlcl93aGlsZUAyNQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIGFzc2VydCh2b3Rlc1tpXSAhPT0gdm90ZXNbal0sIEVSUl9JTlZBTElEX1ZPVEVfT1BUSU9OKQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfZGlnIDYKICAgICE9CiAgICBhc3NlcnQgLy8gSW52YWxpZCB2b3RlIG9wdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGZvciAobGV0IGo6IHVpbnQ2NCA9IGkgKyAxOyBqIDwgdm90ZXMubGVuZ3RoOyBqICs9IDEpIHsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgY3JlYXRlVm90ZV93aGlsZV90b3BAMjMKCmNyZWF0ZVZvdGVfYWZ0ZXJfd2hpbGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyNgogICAgLy8gaWYgKHZvdGVzW2ldID09PSAwKSB7CiAgICBmcmFtZV9kaWcgNgogICAgYm56IGNyZWF0ZVZvdGVfZWxzZV9ib2R5QDI3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gdGhpcy52b3Rlc09uZS52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB2b3Rlc09uZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNPbmUgfSkKICAgIGJ5dGVjXzAgLy8gInZvdGVzX29uZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyB0aGlzLnZvdGVzT25lLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyB2b3Rlc09uZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNPbmUgfSkKICAgIGJ5dGVjXzAgLy8gInZvdGVzX29uZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyB0aGlzLnZvdGVzT25lLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCmNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUAzOToKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9idXJ5IDIKICAgIGIgY3JlYXRlVm90ZV93aGlsZV90b3BAMjEKCmNyZWF0ZVZvdGVfZWxzZV9ib2R5QDI3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIH0gZWxzZSBpZiAodm90ZXNbaV0gPT09IDEpIHsKICAgIGZyYW1lX2RpZyA2CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGJ6IGNyZWF0ZVZvdGVfZWxzZV9ib2R5QDI5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gdGhpcy52b3Rlc1R3by52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB2b3Rlc1R3byA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUd28gfSkKICAgIGJ5dGVjXzEgLy8gInZvdGVzX3R3byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyB0aGlzLnZvdGVzVHdvLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyB2b3Rlc1R3byA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNUd28gfSkKICAgIGJ5dGVjXzEgLy8gInZvdGVzX3R3byIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyB0aGlzLnZvdGVzVHdvLnZhbHVlICs9IGltcGFjdAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgY3JlYXRlVm90ZV9hZnRlcl9pZl9lbHNlQDM5CgpjcmVhdGVWb3RlX2Vsc2VfYm9keUAyOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTMwCiAgICAvLyB9IGVsc2UgaWYgKHZvdGVzW2ldID09PSAyKSB7CiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBieiBjcmVhdGVWb3RlX2Vsc2VfYm9keUAzMQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMzEKICAgIC8vIHRoaXMudm90ZXNUaHJlZS52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyB2b3Rlc1RocmVlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlWb3Rlc1RocmVlIH0pCiAgICBieXRlY18yIC8vICJ2b3Rlc190aHJlZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTMxCiAgICAvLyB0aGlzLnZvdGVzVGhyZWUudmFsdWUgKz0gaW1wYWN0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDcKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIHZvdGVzVGhyZWUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzVGhyZWUgfSkKICAgIGJ5dGVjXzIgLy8gInZvdGVzX3RocmVlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMzEKICAgIC8vIHRoaXMudm90ZXNUaHJlZS52YWx1ZSArPSBpbXBhY3QKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUAzOQoKY3JlYXRlVm90ZV9lbHNlX2JvZHlAMzE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gfSBlbHNlIGlmICh2b3Rlc1tpXSA9PT0gMykgewogICAgZnJhbWVfZGlnIDYKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA9PQogICAgYnogY3JlYXRlVm90ZV9lbHNlX2JvZHlAMzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTMzCiAgICAvLyB0aGlzLnZvdGVzRm91ci52YWx1ZSArPSBpbXBhY3QKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg2CiAgICAvLyB2b3Rlc0ZvdXIgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzRm91ciB9KQogICAgYnl0ZWNfMyAvLyAidm90ZXNfZm91ciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTMzCiAgICAvLyB0aGlzLnZvdGVzRm91ci52YWx1ZSArPSBpbXBhY3QKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgNwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czo4NgogICAgLy8gdm90ZXNGb3VyID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBQb2xsR2xvYmFsU3RhdGVLZXlWb3Rlc0ZvdXIgfSkKICAgIGJ5dGVjXzMgLy8gInZvdGVzX2ZvdXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy52b3Rlc0ZvdXIudmFsdWUgKz0gaW1wYWN0CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBjcmVhdGVWb3RlX2FmdGVyX2lmX2Vsc2VAMzkKCmNyZWF0ZVZvdGVfZWxzZV9ib2R5QDMzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMzQKICAgIC8vIH0gZWxzZSBpZiAodm90ZXNbaV0gPT09IDQpIHsKICAgIGZyYW1lX2RpZyA2CiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIGJ6IGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUAzOQogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIHRoaXMudm90ZXNGaXZlLnZhbHVlICs9IGltcGFjdAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIHZvdGVzRml2ZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAsIGtleTogUG9sbEdsb2JhbFN0YXRlS2V5Vm90ZXNGaXZlIH0pCiAgICBieXRlYyA0IC8vICJ2b3Rlc19maXZlIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIHRoaXMudm90ZXNGaXZlLnZhbHVlICs9IGltcGFjdAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyA3CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyB2b3Rlc0ZpdmUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IFBvbGxHbG9iYWxTdGF0ZUtleVZvdGVzRml2ZSB9KQogICAgYnl0ZWMgNCAvLyAidm90ZXNfZml2ZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2NvbnRyYWN0LmFsZ28udHM6MTM1CiAgICAvLyB0aGlzLnZvdGVzRml2ZS52YWx1ZSArPSBpbXBhY3QKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGNyZWF0ZVZvdGVfYWZ0ZXJfaWZfZWxzZUAzOQo=\",\"clear\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==\"},\"byteCode\":{\"approval\":\"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\",\"clear\":\"C4EBQw==\"},\"events\":[],\"templateVariables\":{}} as unknown as Arc56Contract\n\n/**\n * A state record containing binary data\n */\nexport interface BinaryState {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array | undefined\n /**\n * Gets the state value as a string\n */\n asString(): string | undefined\n}\n\nclass BinaryStateValue implements BinaryState {\n constructor(private value: Uint8Array | undefined) {}\n\n asByteArray(): Uint8Array | undefined {\n return this.value\n }\n\n asString(): string | undefined {\n return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined\n }\n}\n\n/**\n * Expands types for IntelliSense so they are more human readable\n * See https://stackoverflow.com/a/69288824\n */\nexport type Expand<T> = T extends (...args: infer A) => infer R\n ? (...args: Expand<A>) => Expand<R>\n : T extends infer O\n ? { [K in keyof O]: O[K] }\n : never\n\n\n/**\n * The argument types for the Poll contract\n */\nexport type PollArgs = {\n /**\n * The object representation of the arguments for each method\n */\n obj: {\n 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void': {\n akitaDao: bigint | number\n type: bigint | number\n endTime: bigint | number\n maxSelected: bigint | number\n question: string\n options: string[]\n gateId: bigint | number\n }\n 'deleteBoxes(address[])void': {\n addresses: string[]\n }\n 'gatedVote(pay,appl,uint64[])void': {\n mbrPayment?: AppMethodCallTransactionArgument\n gateTxn: AppMethodCallTransactionArgument\n votes: bigint[] | number[]\n }\n 'vote(pay,uint64[])void': {\n mbrPayment: AppMethodCallTransactionArgument\n votes: bigint[] | number[]\n }\n 'hasVoted(address)bool': {\n user: string\n }\n 'updateAkitaDAO(uint64)void': {\n akitaDao: bigint | number\n }\n 'opUp()void': Record<string, never>\n }\n /**\n * The tuple representation of the arguments for each method\n */\n tuple: {\n 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void': [akitaDao: bigint | number, type: bigint | number, endTime: bigint | number, maxSelected: bigint | number, question: string, options: string[], gateId: bigint | number]\n 'deleteBoxes(address[])void': [addresses: string[]]\n 'gatedVote(pay,appl,uint64[])void': [mbrPayment: AppMethodCallTransactionArgument | undefined, gateTxn: AppMethodCallTransactionArgument, votes: bigint[] | number[]]\n 'vote(pay,uint64[])void': [mbrPayment: AppMethodCallTransactionArgument, votes: bigint[] | number[]]\n 'hasVoted(address)bool': [user: string]\n 'updateAkitaDAO(uint64)void': [akitaDao: bigint | number]\n 'opUp()void': []\n }\n}\n\n/**\n * The return type for each method\n */\nexport type PollReturns = {\n 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void': void\n 'deleteBoxes(address[])void': void\n 'gatedVote(pay,appl,uint64[])void': void\n 'vote(pay,uint64[])void': void\n 'hasVoted(address)bool': boolean\n 'updateAkitaDAO(uint64)void': void\n 'opUp()void': void\n}\n\n/**\n * Defines the types of available calls and state of the Poll smart contract.\n */\nexport type PollTypes = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods:\n & Record<'create(uint64,uint8,uint64,uint64,string,string[],uint64)void' | 'create', {\n argsObj: PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']\n argsTuple: PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']\n returns: PollReturns['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']\n }>\n & Record<'deleteBoxes(address[])void' | 'deleteBoxes', {\n argsObj: PollArgs['obj']['deleteBoxes(address[])void']\n argsTuple: PollArgs['tuple']['deleteBoxes(address[])void']\n returns: PollReturns['deleteBoxes(address[])void']\n }>\n & Record<'gatedVote(pay,appl,uint64[])void' | 'gatedVote', {\n argsObj: PollArgs['obj']['gatedVote(pay,appl,uint64[])void']\n argsTuple: PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']\n returns: PollReturns['gatedVote(pay,appl,uint64[])void']\n }>\n & Record<'vote(pay,uint64[])void' | 'vote', {\n argsObj: PollArgs['obj']['vote(pay,uint64[])void']\n argsTuple: PollArgs['tuple']['vote(pay,uint64[])void']\n returns: PollReturns['vote(pay,uint64[])void']\n }>\n & Record<'hasVoted(address)bool' | 'hasVoted', {\n argsObj: PollArgs['obj']['hasVoted(address)bool']\n argsTuple: PollArgs['tuple']['hasVoted(address)bool']\n returns: PollReturns['hasVoted(address)bool']\n }>\n & Record<'updateAkitaDAO(uint64)void' | 'updateAkitaDAO', {\n argsObj: PollArgs['obj']['updateAkitaDAO(uint64)void']\n argsTuple: PollArgs['tuple']['updateAkitaDAO(uint64)void']\n returns: PollReturns['updateAkitaDAO(uint64)void']\n }>\n & Record<'opUp()void' | 'opUp', {\n argsObj: PollArgs['obj']['opUp()void']\n argsTuple: PollArgs['tuple']['opUp()void']\n returns: PollReturns['opUp()void']\n }>\n /**\n * Defines the shape of the state of the application.\n */\n state: {\n global: {\n keys: {\n /**\n * The type of poll: SingleChoice, MultipleChoice, SingleChoiceImpact or MultipleChoiceImpact\n */\n type: number\n /**\n * the gate id to be used for filtering who can interact with this poll\n */\n gateId: bigint\n /**\n * the time the poll ends as a unix timestamp\n */\n endTime: bigint\n /**\n * the number of options in the poll\n */\n optionCount: bigint\n /**\n * the maximum number of selections in a multiple choice poll\n */\n maxSelected: bigint\n /**\n * the number of boxes created during the poll\n */\n boxCount: bigint\n /**\n * the question being asked\n */\n question: string\n /**\n * the options and vote counts of the poll\n */\n optionOne: string\n optionTwo: string\n optionThree: string\n optionFour: string\n optionFive: string\n /**\n * the number of votes for each option\n */\n votesOne: bigint\n votesTwo: bigint\n votesThree: bigint\n votesFour: bigint\n votesFive: bigint\n /**\n * the current version of the contract\n */\n version: string\n /**\n * the app ID of the Akita DAO\n */\n akitaDao: bigint\n }\n maps: {}\n }\n box: {\n keys: {}\n maps: {\n /**\n * A map of addresses to empty bytes to track who has voted\n */\n votes: Map<string, Uint8Array>\n }\n }\n }\n}\n\n/**\n * Defines the possible abi call signatures.\n */\nexport type PollSignatures = keyof PollTypes['methods']\n/**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\nexport type PollNonVoidMethodSignatures = keyof PollTypes['methods'] extends infer T ? T extends keyof PollTypes['methods'] ? MethodReturn<T> extends void ? never : T : never : never\n/**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\nexport type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n>\n/**\n * Maps a method signature from the Poll smart contract to the method's arguments in either tuple or struct form\n */\nexport type MethodArgs<TSignature extends PollSignatures> = PollTypes['methods'][TSignature]['argsObj' | 'argsTuple']\n/**\n * Maps a method signature from the Poll smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends PollSignatures> = PollTypes['methods'][TSignature]['returns']\n\n/**\n * Defines the shape of the keyed global state of the application.\n */\nexport type GlobalKeysState = PollTypes['state']['global']['keys']\n\n/**\n * Defines the shape of the keyed box state of the application.\n */\nexport type BoxKeysState = PollTypes['state']['box']['keys']\n\n\n/**\n * Defines supported create method params for this smart contract\n */\nexport type PollCreateCallParams =\n | Expand<CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & {method: 'create'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n | Expand<CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & {method: 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n/**\n * Defines arguments required for the deploy method.\n */\nexport type PollDeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {\n /**\n * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n createParams?: PollCreateCallParams\n}>\n\n\n/**\n * Exposes methods for constructing `AppClient` params objects for ABI calls to the Poll smart contract\n */\nexport abstract class PollParamsFactory {\n /**\n * Gets available create ABI call param factories\n */\n static get create() {\n return {\n _resolveByMethod<TParams extends PollCreateCallParams & {method: string}>(params: TParams) {\n switch(params.method) {\n case 'create':\n case 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void':\n return PollParamsFactory.create.create(params)\n }\n throw new Error(`Unknown ' + verb + ' method`)\n },\n\n /**\n * Constructs create ABI call params for the Poll smart contract using the create(uint64,uint8,uint64,uint64,string,string[],uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n create(params: CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC}): AppClientMethodCallParams & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC} {\n return {\n ...params,\n method: 'create(uint64,uint8,uint64,uint64,string,string[],uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.akitaDao, params.args.type, params.args.endTime, params.args.maxSelected, params.args.question, params.args.options, params.args.gateId],\n }\n },\n }\n }\n\n /**\n * Constructs a no op call for the deleteBoxes(address[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static deleteBoxes(params: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'deleteBoxes(address[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.addresses],\n }\n }\n /**\n * Constructs a no op call for the gatedVote(pay,appl,uint64[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static gatedVote(params: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'gatedVote(pay,appl,uint64[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.gateTxn, params.args.votes],\n }\n }\n /**\n * Constructs a no op call for the vote(pay,uint64[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static vote(params: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'vote(pay,uint64[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.votes],\n }\n }\n /**\n * Constructs a no op call for the hasVoted(address)bool ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static hasVoted(params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'hasVoted(address)bool' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.user],\n }\n }\n /**\n * Constructs a no op call for the updateAkitaDAO(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static updateAkitaDao(params: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'updateAkitaDAO(uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.akitaDao],\n }\n }\n /**\n * Constructs a no op call for the opUp()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static opUp(params: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'opUp()void' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n}\n\n/**\n * A factory to create and deploy one or more instance of the Poll smart contract and to create one or more app clients to interact with those (or other) app instances\n */\nexport class PollFactory {\n /**\n * The underlying `AppFactory` for when you want to have more flexibility\n */\n public readonly appFactory: _AppFactory\n\n /**\n * Creates a new instance of `PollFactory`\n *\n * @param params The parameters to initialise the app factory with\n */\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n })\n }\n \n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName\n }\n \n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC\n }\n \n /** A reference to the underlying `AlgorandClient` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand\n }\n \n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new PollClient(this.appFactory.getAppClientById(params))\n }\n \n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public async getAppClientByCreatorAndName(\n params: AppFactoryResolveAppClientByCreatorAndNameParams,\n ) {\n return new PollClient(await this.appFactory.getAppClientByCreatorAndName(params))\n }\n\n /**\n * Idempotently deploys the Poll smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public async deploy(params: PollDeployParams = {}) {\n const result = await this.appFactory.deploy({\n ...params,\n createParams: params.createParams?.method ? PollParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (PollCreateCallParams & { args: Uint8Array[] }) : undefined,\n })\n return { result: result.result, appClient: new PollClient(result.appClient) }\n }\n\n /**\n * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Poll smart contract using the create(uint64,uint8,uint64,uint64,string,string[],uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create params\n */\n create: (params: CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.params.create(PollParamsFactory.create.create(params))\n },\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Poll smart contract using the create(uint64,uint8,uint64,uint64,string,string[],uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create transaction\n */\n create: (params: CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.createTransaction.create(PollParamsFactory.create.create(params))\n },\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Poll smart contract using an ABI method call using the create(uint64,uint8,uint64,uint64,string,string[],uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create result\n */\n create: async (params: CallParams<PollArgs['obj']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void'] | PollArgs['tuple']['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']> & AppClientCompilationParams & CreateSchema & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appFactory.send.create(PollParamsFactory.create.create(params))\n return { result: { ...result.result, return: result.result.return as unknown as (undefined | PollReturns['create(uint64,uint8,uint64,uint64,string,string[],uint64)void']) }, appClient: new PollClient(result.appClient) }\n },\n },\n\n }\n\n}\n/**\n * A client to make calls to the Poll smart contract\n */\nexport class PollClient {\n /**\n * The underlying `AppClient` for when you want to have more flexibility\n */\n public readonly appClient: _AppClient\n\n /**\n * Creates a new instance of `PollClient`\n *\n * @param appClient An `AppClient` instance which has been created with the Poll app spec\n */\n constructor(appClient: _AppClient)\n /**\n * Creates a new instance of `PollClient`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends PollNonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {\n return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined\n }\n\n /**\n * Returns a new `PollClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<PollClient> {\n return new PollClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n \n /**\n * Returns an `PollClient` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<PollClient> {\n return new PollClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n \n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n \n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n \n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n \n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n \n /** A reference to the underlying `AlgorandClient` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand\n }\n\n /**\n * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Makes a clear_state call to an existing instance of the Poll smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.params.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Poll smart contract using the `deleteBoxes(address[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n deleteBoxes: (params: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollParamsFactory.deleteBoxes(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `gatedVote(pay,appl,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n gatedVote: (params: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollParamsFactory.gatedVote(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `vote(pay,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n vote: (params: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollParamsFactory.vote(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `hasVoted(address)bool` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n hasVoted: (params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollParamsFactory.hasVoted(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n updateAkitaDao: (params: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n opUp: (params: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(PollParamsFactory.opUp(params))\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Makes a clear_state call to an existing instance of the Poll smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.createTransaction.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Poll smart contract using the `deleteBoxes(address[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n deleteBoxes: (params: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.deleteBoxes(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `gatedVote(pay,appl,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n gatedVote: (params: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.gatedVote(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `vote(pay,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n vote: (params: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.vote(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `hasVoted(address)bool` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n hasVoted: (params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.hasVoted(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n updateAkitaDao: (params: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the Poll smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n opUp: (params: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(PollParamsFactory.opUp(params))\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Makes a clear_state call to an existing instance of the Poll smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams & SendParams>) => {\n return this.appClient.send.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Poll smart contract using the `deleteBoxes(address[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n deleteBoxes: async (params: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollParamsFactory.deleteBoxes(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['deleteBoxes(address[])void'])}\n },\n\n /**\n * Makes a call to the Poll smart contract using the `gatedVote(pay,appl,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n gatedVote: async (params: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollParamsFactory.gatedVote(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['gatedVote(pay,appl,uint64[])void'])}\n },\n\n /**\n * Makes a call to the Poll smart contract using the `vote(pay,uint64[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n vote: async (params: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollParamsFactory.vote(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['vote(pay,uint64[])void'])}\n },\n\n /**\n * Makes a call to the Poll smart contract using the `hasVoted(address)bool` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n hasVoted: async (params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollParamsFactory.hasVoted(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['hasVoted(address)bool'])}\n },\n\n /**\n * Makes a call to the Poll smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n updateAkitaDao: async (params: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollParamsFactory.updateAkitaDao(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['updateAkitaDAO(uint64)void'])}\n },\n\n /**\n * Makes a call to the Poll smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n opUp: async (params: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(PollParamsFactory.opUp(params))\n return {...result, return: result.return as unknown as (undefined | PollReturns['opUp()void'])}\n },\n\n }\n\n /**\n * Clone this app client with different params\n *\n * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.\n * @returns A new app client with the altered params\n */\n public clone(params: CloneAppClientParams) {\n return new PollClient(this.appClient.clone(params))\n }\n\n /**\n * Makes a readonly (simulated) call to the Poll smart contract using the `hasVoted(address)bool` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async hasVoted(params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']>) {\n const result = await this.appClient.send.call(PollParamsFactory.hasVoted(params))\n return result.return as unknown as PollReturns['hasVoted(address)bool']\n }\n\n /**\n * Methods to access state for the current Poll app\n */\n state = {\n /**\n * Methods to access global state for the current Poll app\n */\n global: {\n /**\n * Get all current keyed values from global state\n */\n getAll: async (): Promise<Partial<Expand<GlobalKeysState>>> => {\n const result = await this.appClient.state.global.getAll()\n return {\n type: result.type,\n gateId: result.gateID,\n endTime: result.endTime,\n optionCount: result.optionCount,\n maxSelected: result.maxSelected,\n boxCount: result.boxCount,\n question: result.question,\n optionOne: result.optionOne,\n optionTwo: result.optionTwo,\n optionThree: result.optionThree,\n optionFour: result.optionFour,\n optionFive: result.optionFive,\n votesOne: result.votesOne,\n votesTwo: result.votesTwo,\n votesThree: result.votesThree,\n votesFour: result.votesFour,\n votesFive: result.votesFive,\n version: result.version,\n akitaDao: result.akitaDAO,\n }\n },\n /**\n * Get the current value of the type key in global state\n */\n type: async (): Promise<number | undefined> => { return (await this.appClient.state.global.getValue(\"type\")) as number | undefined },\n /**\n * Get the current value of the gateID key in global state\n */\n gateId: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"gateID\")) as bigint | undefined },\n /**\n * Get the current value of the endTime key in global state\n */\n endTime: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"endTime\")) as bigint | undefined },\n /**\n * Get the current value of the optionCount key in global state\n */\n optionCount: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"optionCount\")) as bigint | undefined },\n /**\n * Get the current value of the maxSelected key in global state\n */\n maxSelected: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"maxSelected\")) as bigint | undefined },\n /**\n * Get the current value of the boxCount key in global state\n */\n boxCount: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"boxCount\")) as bigint | undefined },\n /**\n * Get the current value of the question key in global state\n */\n question: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"question\")) as string | undefined },\n /**\n * Get the current value of the optionOne key in global state\n */\n optionOne: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"optionOne\")) as string | undefined },\n /**\n * Get the current value of the optionTwo key in global state\n */\n optionTwo: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"optionTwo\")) as string | undefined },\n /**\n * Get the current value of the optionThree key in global state\n */\n optionThree: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"optionThree\")) as string | undefined },\n /**\n * Get the current value of the optionFour key in global state\n */\n optionFour: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"optionFour\")) as string | undefined },\n /**\n * Get the current value of the optionFive key in global state\n */\n optionFive: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"optionFive\")) as string | undefined },\n /**\n * Get the current value of the votesOne key in global state\n */\n votesOne: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"votesOne\")) as bigint | undefined },\n /**\n * Get the current value of the votesTwo key in global state\n */\n votesTwo: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"votesTwo\")) as bigint | undefined },\n /**\n * Get the current value of the votesThree key in global state\n */\n votesThree: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"votesThree\")) as bigint | undefined },\n /**\n * Get the current value of the votesFour key in global state\n */\n votesFour: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"votesFour\")) as bigint | undefined },\n /**\n * Get the current value of the votesFive key in global state\n */\n votesFive: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"votesFive\")) as bigint | undefined },\n /**\n * Get the current value of the version key in global state\n */\n version: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"version\")) as string | undefined },\n /**\n * Get the current value of the akitaDAO key in global state\n */\n akitaDao: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"akitaDAO\")) as bigint | undefined },\n },\n /**\n * Methods to access box state for the current Poll app\n */\n box: {\n /**\n * Get all current keyed values from box state\n */\n getAll: async (): Promise<Partial<Expand<BoxKeysState>>> => {\n const result = await this.appClient.state.box.getAll()\n return {\n }\n },\n /**\n * Get values from the votes map in box state\n */\n votes: {\n /**\n * Get all current values of the votes map in box state\n */\n getMap: async (): Promise<Map<string, Uint8Array>> => { return (await this.appClient.state.box.getMap(\"votes\")) as Map<string, Uint8Array> },\n /**\n * Get a current value of the votes map by key from box state\n */\n value: async (key: string): Promise<Uint8Array | undefined> => { return await this.appClient.state.box.getMapValue(\"votes\", key) as Uint8Array | undefined },\n },\n },\n }\n\n public newGroup(): PollComposer {\n const client = this\n const composer = this.algorand.newGroup()\n let promiseChain:Promise<unknown> = Promise.resolve()\n const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []\n return {\n /**\n * Add a deleteBoxes(address[])void method call against the Poll contract\n */\n deleteBoxes(params: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBoxes(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a gatedVote(pay,appl,uint64[])void method call against the Poll contract\n */\n gatedVote(params: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.gatedVote(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a vote(pay,uint64[])void method call against the Poll contract\n */\n vote(params: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.vote(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a hasVoted(address)bool method call against the Poll contract\n */\n hasVoted(params: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.hasVoted(params)))\n resultMappers.push((v) => client.decodeReturnValue('hasVoted(address)bool', v))\n return this\n },\n /**\n * Add a updateAkitaDAO(uint64)void method call against the Poll contract\n */\n updateAkitaDao(params: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.updateAkitaDao(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a opUp()void method call against the Poll contract\n */\n opUp(params: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.opUp(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a clear state call to the Poll contract\n */\n clearState(params: AppClientBareCallParams) {\n promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)))\n return this\n },\n addTransaction(txn: Transaction, signer?: TransactionSigner) {\n promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer))\n return this\n },\n async composer() {\n await promiseChain\n return composer\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain\n const result = await (!options ? composer.simulate() : composer.simulate(options))\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n },\n async send(params?: SendParams) {\n await promiseChain\n const result = await composer.send(params)\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n }\n } as unknown as PollComposer\n }\n}\nexport type PollComposer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the deleteBoxes(address[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n deleteBoxes(params?: CallParams<PollArgs['obj']['deleteBoxes(address[])void'] | PollArgs['tuple']['deleteBoxes(address[])void']>): PollComposer<[...TReturns, PollReturns['deleteBoxes(address[])void'] | undefined]>\n\n /**\n * Calls the gatedVote(pay,appl,uint64[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n gatedVote(params?: CallParams<PollArgs['obj']['gatedVote(pay,appl,uint64[])void'] | PollArgs['tuple']['gatedVote(pay,appl,uint64[])void']>): PollComposer<[...TReturns, PollReturns['gatedVote(pay,appl,uint64[])void'] | undefined]>\n\n /**\n * Calls the vote(pay,uint64[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n vote(params?: CallParams<PollArgs['obj']['vote(pay,uint64[])void'] | PollArgs['tuple']['vote(pay,uint64[])void']>): PollComposer<[...TReturns, PollReturns['vote(pay,uint64[])void'] | undefined]>\n\n /**\n * Calls the hasVoted(address)bool ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n hasVoted(params?: CallParams<PollArgs['obj']['hasVoted(address)bool'] | PollArgs['tuple']['hasVoted(address)bool']>): PollComposer<[...TReturns, PollReturns['hasVoted(address)bool'] | undefined]>\n\n /**\n * Calls the updateAkitaDAO(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n updateAkitaDao(params?: CallParams<PollArgs['obj']['updateAkitaDAO(uint64)void'] | PollArgs['tuple']['updateAkitaDAO(uint64)void']>): PollComposer<[...TReturns, PollReturns['updateAkitaDAO(uint64)void'] | undefined]>\n\n /**\n * Calls the opUp()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n opUp(params?: CallParams<PollArgs['obj']['opUp()void'] | PollArgs['tuple']['opUp()void']>): PollComposer<[...TReturns, PollReturns['opUp()void'] | undefined]>\n\n /**\n * Makes a clear_state call to an existing instance of the Poll smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(params?: AppClientBareCallParams): PollComposer<[...TReturns, undefined]>\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn A transaction to add to the transaction group\n * @param signer The optional signer to use when signing this transaction.\n */\n addTransaction(txn: Transaction, signer?: TransactionSigner): PollComposer<TReturns>\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n composer(): Promise<TransactionComposer>\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(): Promise<PollComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: SkipSignaturesSimulateOptions): Promise<PollComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: RawSimulateOptions): Promise<PollComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n /**\n * Sends the transaction group to the network and returns the results\n */\n send(params?: SendParams): Promise<PollComposerResults<TReturns>>\n}\nexport type PollComposerResults<TReturns extends [...any[]]> = Expand<SendAtomicTransactionComposerResults & {\n returns: TReturns\n}>\n\n","import { MaybeSigner } from \"../types\";\nimport {\n PollArgs,\n} from '../generated/PollClient';\nimport { PollFactoryArgs } from '../generated/PollFactoryClient';\nimport { AppCallMethodCall } from \"@algorandfoundation/algokit-utils/types/composer\";\n\n// Factory Types\ntype FactoryContractArgs = PollFactoryArgs[\"obj\"];\n\nexport type NewPollParams = MaybeSigner & Omit<\n FactoryContractArgs['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'],\n 'payment'\n>;\n\n// Individual Poll Types\ntype PollContractArgs = PollArgs[\"obj\"];\n\nexport type VoteParams = MaybeSigner & {\n /** Array of option indices (0-based) to vote for */\n votes: bigint[];\n /** Optional gate transaction for gated polls */\n gateTxn?: AppCallMethodCall;\n};\n\nexport type DeleteBoxesParams = MaybeSigner & PollContractArgs['deleteBoxes(address[])void'];\n\nexport type HasVotedParams = PollContractArgs['hasVoted(address)bool'];\n\nexport type PollState = {\n type: number;\n gateId: bigint;\n endTime: bigint;\n optionCount: bigint;\n maxSelected: bigint;\n boxCount: bigint;\n question: string;\n optionOne: string;\n optionTwo: string;\n optionThree: string;\n optionFour: string;\n optionFive: string;\n votesOne: bigint;\n votesTwo: bigint;\n votesThree: bigint;\n votesFour: bigint;\n votesFive: bigint;\n};\n\n// Poll type constants\nexport enum PollTypeEnum {\n SingleChoice = 10,\n MultipleChoice = 20,\n SingleChoiceImpact = 30,\n MultipleChoiceImpact = 40,\n}\n\n// MBR constant for votes box\nexport const VOTES_MBR = 15_300n;\n\n","import { microAlgo } from \"@algorandfoundation/algokit-utils\";\nimport { BaseSDK } from \"../base\";\nimport { ENV_VAR_NAMES } from \"../config\";\nimport {\n PollFactoryClient,\n PollFactoryFactory,\n PollFactoryArgs,\n} from '../generated/PollFactoryClient';\nimport { MaybeSigner, NewContractSDKParams } from \"../types\";\nimport { PollSDK } from \"./index\";\nimport { NewPollParams } from \"./types\";\n\nexport type PollFactoryContractArgs = PollFactoryArgs[\"obj\"];\n\n/**\n * SDK for interacting with the Poll Factory contract.\n * Used to create new polls.\n */\nexport class PollFactorySDK extends BaseSDK<PollFactoryClient> {\n\n constructor(params: NewContractSDKParams) {\n super({ factory: PollFactoryFactory, ...params }, ENV_VAR_NAMES.POLL_FACTORY_APP_ID);\n }\n\n /**\n * Creates a new poll and returns a PollSDK instance.\n * @returns PollSDK for the newly created poll\n */\n async new({\n sender,\n signer,\n type,\n endTime,\n maxSelected,\n question,\n options,\n gateId,\n }: NewPollParams): Promise<PollSDK> {\n\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // Get the cost for creating a new poll\n const cost = await this.cost();\n\n const payment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(cost),\n receiver: this.client.appAddress,\n });\n\n const { return: appId } = await this.client.send.new({\n ...sendParams,\n args: {\n payment,\n type,\n endTime,\n maxSelected,\n question,\n options,\n gateId,\n },\n });\n\n if (appId === undefined) {\n throw new Error('Failed to create new poll');\n }\n\n return new PollSDK({\n algorand: this.algorand,\n factoryParams: {\n appId,\n defaultSender: sendParams.sender,\n defaultSigner: sendParams.signer,\n },\n });\n }\n\n /**\n * Gets a PollSDK instance for an existing poll.\n * @param appId - The app ID of the poll\n * @returns PollSDK for the specified poll\n */\n get({ appId }: { appId: bigint }): PollSDK {\n return new PollSDK({\n algorand: this.algorand,\n factoryParams: {\n appId,\n defaultSender: this.sendParams.sender,\n defaultSigner: this.sendParams.signer,\n },\n });\n }\n\n /**\n * Gets the cost to create a new poll.\n */\n async cost(): Promise<bigint> {\n return await this.client.newPollCost();\n }\n\n /**\n * Updates the Akita DAO reference.\n */\n async updateAkitaDAO({ sender, signer, akitaDao }: MaybeSigner & PollFactoryContractArgs['updateAkitaDAO(uint64)void']): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.updateAkitaDao({\n ...sendParams,\n args: { akitaDao },\n });\n }\n\n /**\n * Updates the Akita DAO Escrow reference.\n */\n async updateAkitaDAOEscrow({ sender, signer, app }: MaybeSigner & PollFactoryContractArgs['updateAkitaDAOEscrow(uint64)void']): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.updateAkitaDaoEscrow({\n ...sendParams,\n args: { app },\n });\n }\n}\n\n/**\n * Convenience function to create a new poll and return the SDK.\n * Creates a factory SDK, creates the poll, and returns the poll SDK.\n */\nexport async function newPoll({\n factoryParams,\n algorand,\n readerAccount,\n sendParams,\n ...pollParams\n}: NewContractSDKParams & NewPollParams): Promise<PollSDK> {\n const factory = new PollFactorySDK({ factoryParams, algorand, readerAccount, sendParams });\n return await factory.new(pollParams);\n}\n\n","/* eslint-disable */\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^7\n */\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\nimport { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport {\n AppClient as _AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n} from '@algorandfoundation/algokit-utils/types/app-client'\nimport { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\nimport { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n\nexport const APP_SPEC: Arc56Contract = {\"name\":\"PollFactory\",\"structs\":{},\"methods\":[{\"name\":\"create\",\"args\":[{\"type\":\"string\",\"name\":\"version\"},{\"type\":\"string\",\"name\":\"childVersion\"},{\"type\":\"uint64\",\"name\":\"akitaDAO\"},{\"type\":\"uint64\",\"name\":\"akitaDAOEscrow\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[\"NoOp\"],\"call\":[]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"new\",\"args\":[{\"type\":\"pay\",\"name\":\"payment\"},{\"type\":\"uint8\",\"name\":\"type\"},{\"type\":\"uint64\",\"name\":\"endTime\"},{\"type\":\"uint64\",\"name\":\"maxSelected\"},{\"type\":\"string\",\"name\":\"question\"},{\"type\":\"string[]\",\"name\":\"options\"},{\"type\":\"uint64\",\"name\":\"gateID\"}],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"newPollCost\",\"args\":[],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"events\":[],\"recommendations\":{}},{\"name\":\"initBoxedContract\",\"args\":[{\"type\":\"string\",\"name\":\"version\"},{\"type\":\"uint64\",\"name\":\"size\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"loadBoxedContract\",\"args\":[{\"type\":\"uint64\",\"name\":\"offset\"},{\"type\":\"byte[]\",\"name\":\"data\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"deleteBoxedContract\",\"args\":[],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"optIn\",\"args\":[{\"type\":\"pay\",\"name\":\"payment\",\"desc\":\"The payment transaction\"},{\"type\":\"uint64\",\"name\":\"asset\",\"desc\":\"The asset to be opted into\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"desc\":\"optin tells the contract to opt into an asa\",\"events\":[],\"recommendations\":{}},{\"name\":\"optInCost\",\"args\":[{\"type\":\"uint64\",\"name\":\"asset\"}],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"events\":[],\"recommendations\":{}},{\"name\":\"updateAkitaDAOEscrow\",\"args\":[{\"type\":\"uint64\",\"name\":\"app\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"update\",\"args\":[{\"type\":\"string\",\"name\":\"newVersion\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"UpdateApplication\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"updateAkitaDAO\",\"args\":[{\"type\":\"uint64\",\"name\":\"akitaDAO\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"opUp\",\"args\":[],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}}],\"arcs\":[22,28],\"networks\":{},\"state\":{\"schema\":{\"global\":{\"ints\":2,\"bytes\":2},\"local\":{\"ints\":0,\"bytes\":0}},\"keys\":{\"global\":{\"childContractVersion\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"Y2hpbGRfY29udHJhY3RfdmVyc2lvbg==\",\"desc\":\"the current version of the child contract\"},\"akitaDAOEscrow\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"YWtpdGFfZXNjcm93\",\"desc\":\"the app ID for the akita DAO escrow to use\"},\"version\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"dmVyc2lvbg==\",\"desc\":\"the current version of the contract\"},\"akitaDAO\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"YWtpdGFfZGFv\",\"desc\":\"the app ID of the Akita DAO\"}},\"local\":{},\"box\":{\"boxedContract\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMBytes\",\"key\":\"YmM=\"}}},\"maps\":{\"global\":{},\"local\":{},\"box\":{}}},\"bareActions\":{\"create\":[],\"call\":[]},\"sourceInfo\":{\"approval\":{\"sourceInfo\":[{\"pc\":[2237],\"errorMessage\":\"Contract not set\"},{\"pc\":[2460],\"errorMessage\":\"Invalid app upgrade\"},{\"pc\":[2232],\"errorMessage\":\"Invalid call order\"},{\"pc\":[403,2324],\"errorMessage\":\"Invalid payment\"},{\"pc\":[102],\"errorMessage\":\"OnCompletion must be NoOp\"},{\"pc\":[209],\"errorMessage\":\"OnCompletion must be UpdateApplication && can only call when not creating\"},{\"pc\":[2115,2135,2263,2408,2446,2489],\"errorMessage\":\"Only the Akita DAO can call this function\"},{\"pc\":[2038,2133,2261,2298,2365,2406,2442,2487],\"errorMessage\":\"application exists\"},{\"pc\":[408,2127,2255,2291,2295,2358,2362,2400,2435,2481],\"errorMessage\":\"check GlobalState exists\"},{\"pc\":[2164],\"errorMessage\":\"invalid number of bytes for (len+uint8[])\"},{\"pc\":[270,286,373,2085,2426],\"errorMessage\":\"invalid number of bytes for (len+utf8[])\"},{\"pc\":[297,306,352,360,384,2096,2149,2286,2353,2393,2474],\"errorMessage\":\"invalid number of bytes for uint64\"},{\"pc\":[344],\"errorMessage\":\"invalid number of bytes for uint8\"},{\"pc\":[336,2278],\"errorMessage\":\"transaction type is pay\"}],\"pcOffsetMethod\":\"none\"},\"clear\":{\"sourceInfo\":[],\"pcOffsetMethod\":\"none\"}},\"source\":{\"approval\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMiA4MTM1MDAKICAgIGJ5dGVjYmxvY2sgImFraXRhX2RhbyIgImJjIiAid2FsbGV0IiAiYWtpdGFfZXNjcm93IiAweDE1MWY3Yzc1IDB4YzUzYjMyY2MgInZlcnNpb24iICJjaGlsZF9jb250cmFjdF92ZXJzaW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjkKICAgIC8vIGV4cG9ydCBjbGFzcyBQb2xsRmFjdG9yeSBleHRlbmRzIEZhY3RvcnlDb250cmFjdCB7CiAgICBwdXNoYnl0ZXMgMHhlYTkxODBkZCAvLyBtZXRob2QgInVwZGF0ZShzdHJpbmcpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdXBkYXRlX3JvdXRlQDIKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjkKICAgIC8vIGV4cG9ydCBjbGFzcyBQb2xsRmFjdG9yeSBleHRlbmRzIEZhY3RvcnlDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMTYKICAgIHB1c2hieXRlc3MgMHgxMTliYzY5OCAweDgzNjYxNzAzIC8vIG1ldGhvZCAibmV3KHBheSx1aW50OCx1aW50NjQsdWludDY0LHN0cmluZyxzdHJpbmdbXSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJuZXdQb2xsQ29zdCgpdWludDY0IgogICAgYnl0ZWMgNSAvLyBtZXRob2QgImluaXRCb3hlZENvbnRyYWN0KHN0cmluZyx1aW50NjQpdm9pZCIKICAgIHB1c2hieXRlc3MgMHhkY2EyZDg2MiAweGQzNDZiMWE0IDB4Mzk0ZWFlYjIgMHgzM2Y3ODgwOCAweDFlYWQyMGE5IDB4MzNlOTJjOTQgMHg4NTRkZWRlMCAvLyBtZXRob2QgImxvYWRCb3hlZENvbnRyYWN0KHVpbnQ2NCxieXRlW10pdm9pZCIsIG1ldGhvZCAiZGVsZXRlQm94ZWRDb250cmFjdCgpdm9pZCIsIG1ldGhvZCAib3B0SW4ocGF5LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJvcHRJbkNvc3QodWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidXBkYXRlQWtpdGFEQU9Fc2Nyb3codWludDY0KXZvaWQiLCBtZXRob2QgInVwZGF0ZUFraXRhREFPKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJvcFVwKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbmV3IG5ld1BvbGxDb3N0IGluaXRCb3hlZENvbnRyYWN0IGxvYWRCb3hlZENvbnRyYWN0IGRlbGV0ZUJveGVkQ29udHJhY3Qgb3B0SW4gb3B0SW5Db3N0IHVwZGF0ZUFraXRhREFPRXNjcm93IHVwZGF0ZUFraXRhREFPIG1haW5fb3BVcF9yb3V0ZUAxNAogICAgZXJyCgptYWluX29wVXBfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo0MwogICAgLy8gb3BVcCgpOiB2b2lkIHsgfQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVfTm9PcEAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo5CiAgICAvLyBleHBvcnQgY2xhc3MgUG9sbEZhY3RvcnkgZXh0ZW5kcyBGYWN0b3J5Q29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4YzQyNmY0YmEgLy8gbWV0aG9kICJjcmVhdGUoc3RyaW5nLHN0cmluZyx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGUKICAgIGVycgoKbWFpbl91cGRhdGVfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjQ4CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ1VwZGF0ZUFwcGxpY2F0aW9uJ10gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIFVwZGF0ZUFwcGxpY2F0aW9uICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgdXBkYXRlCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czo6c3BsaXRPcHRJbkNvdW50KGFraXRhREFPOiB1aW50NjQsIGVzY3JvdzogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHVpbnQ2NDoKc3BsaXRPcHRJbkNvdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czo2MjEKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBzcGxpdE9wdEluQ291bnQoYWtpdGFEQU86IEFwcGxpY2F0aW9uLCBlc2Nyb3c6IEFjY291bnQsIGFzc2V0OiBBc3NldCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6NjIyCiAgICAvLyBsZXQgY291bnQ6IHVpbnQ2NCA9IDAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjYyNAogICAgLy8gaWYgKCFlc2Nyb3cuaXNPcHRlZEluKGFzc2V0KSkgewogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYnVyeSAxCiAgICBibnogc3BsaXRPcHRJbkNvdW50X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czoxMDMKICAgIC8vIGNvbnN0IFtzcGxpdHNCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcyhha2l0YURBTywgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNSZXZlbnVlU3BsaXRzKSkKICAgIGZyYW1lX2RpZyAtMwogICAgcHVzaGJ5dGVzICJyZXZlbnVlX3NwbGl0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6NjI4CiAgICAvLyBjb3VudCArPSBzcGxpdHMubGVuZ3RoCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6NjI1CiAgICAvLyBjb3VudCArPSAxCiAgICBpbnRjXzEgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Z1bmN0aW9ucy50czo2MjgKICAgIC8vIGNvdW50ICs9IHNwbGl0cy5sZW5ndGgKICAgICsKICAgIGZyYW1lX2J1cnkgMAoKc3BsaXRPcHRJbkNvdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9mdW5jdGlvbnMudHM6NjMxCiAgICAvLyByZXR1cm4gY291bnQKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6OlBvbGxGYWN0b3J5LmNyZWF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czoxMQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI3CiAgICAvLyB2ZXJzaW9uID0gR2xvYmFsU3RhdGU8c3RyaW5nPih7IGtleTogR2xvYmFsU3RhdGVLZXlWZXJzaW9uIH0pCiAgICBieXRlYyA2IC8vICJ2ZXJzaW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjEzCiAgICAvLyB0aGlzLnZlcnNpb24udmFsdWUgPSB2ZXJzaW9uCiAgICB1bmNvdmVyIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czozNAogICAgLy8gY2hpbGRDb250cmFjdFZlcnNpb24gPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KHsga2V5OiBCYXNlRmFjdG9yeUdsb2JhbFN0YXRlS2V5Q2hpbGRDb250cmFjdFZlcnNpb24gfSkKICAgIGJ5dGVjIDcgLy8gImNoaWxkX2NvbnRyYWN0X3ZlcnNpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6MTQKICAgIC8vIHRoaXMuY2hpbGRDb250cmFjdFZlcnNpb24udmFsdWUgPSBjaGlsZFZlcnNpb24KICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjE1CiAgICAvLyB0aGlzLmFraXRhREFPLnZhbHVlID0gYWtpdGFEQU8KICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjY1CiAgICAvLyBha2l0YURBT0VzY3JvdyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YUVzY3JvdyB9KQogICAgYnl0ZWNfMyAvLyAiYWtpdGFfZXNjcm93IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjE2CiAgICAvLyB0aGlzLmFraXRhREFPRXNjcm93LnZhbHVlID0gYWtpdGFEQU9Fc2Nyb3cKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6MTEKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjpQb2xsRmFjdG9yeS5uZXdbcm91dGluZ10oKSAtPiB2b2lkOgpuZXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6MTktMjcKICAgIC8vIG5ldygKICAgIC8vICAgcGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICB0eXBlOiBQb2xsVHlwZSwKICAgIC8vICAgZW5kVGltZTogdWludDY0LAogICAgLy8gICBtYXhTZWxlY3RlZDogdWludDY0LAogICAgLy8gICBxdWVzdGlvbjogc3RyaW5nLAogICAgLy8gICBvcHRpb25zOiBzdHJpbmdbXSwKICAgIC8vICAgZ2F0ZUlEOiB1aW50NjQsCiAgICAvLyApOiB1aW50NjQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjMxLTM4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubmV3UG9sbENvc3QoKSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDYKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6MzQKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6MzEtMzgKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBwYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5uZXdQb2xsQ29zdCgpLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgdW5jb3ZlciA3CiAgICBndHhucyBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo2OS03MQogICAgLy8gTUlOX1BST0dSQU1fUEFHRVMgKwogICAgLy8gKEdMT0JBTF9TVEFURV9LRVlfVUlOVF9DT1NUICogcG9sbC5nbG9iYWxVaW50cykgKwogICAgLy8gKEdMT0JBTF9TVEFURV9LRVlfQllURVNfQ09TVCAqIHBvbGwuZ2xvYmFsQnl0ZXMpICsKICAgIGludGMgNCAvLyA4MTM1MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo3MgogICAgLy8gR2xvYmFsLm1pbkJhbGFuY2UKICAgIGdsb2JhbCBNaW5CYWxhbmNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6NjktNzIKICAgIC8vIE1JTl9QUk9HUkFNX1BBR0VTICsKICAgIC8vIChHTE9CQUxfU1RBVEVfS0VZX1VJTlRfQ09TVCAqIHBvbGwuZ2xvYmFsVWludHMpICsKICAgIC8vIChHTE9CQUxfU1RBVEVfS0VZX0JZVEVTX0NPU1QgKiBwb2xsLmdsb2JhbEJ5dGVzKSArCiAgICAvLyBHbG9iYWwubWluQmFsYW5jZQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjMxLTM4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubmV3UG9sbENvc3QoKSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gSW52YWxpZCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6NDAtNTEKICAgIC8vIGNvbnN0IG1pbnQgPSBwb2xsLmNhbGwKICAgIC8vICAgLmNyZWF0ZSh7CiAgICAvLyAgICAgYXJnczogWwogICAgLy8gICAgICAgdGhpcy5ha2l0YURBTy52YWx1ZS5pZCwKICAgIC8vICAgICAgIHR5cGUsCiAgICAvLyAgICAgICBlbmRUaW1lLAogICAgLy8gICAgICAgbWF4U2VsZWN0ZWQsCiAgICAvLyAgICAgICBxdWVzdGlvbiwKICAgIC8vICAgICAgIG9wdGlvbnMsCiAgICAvLyAgICAgICBnYXRlSUQKICAgIC8vICAgICBdLAogICAgLy8gICB9KQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjQzCiAgICAvLyB0aGlzLmFraXRhREFPLnZhbHVlLmlkLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjQzCiAgICAvLyB0aGlzLmFraXRhREFPLnZhbHVlLmlkLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo0MC01MQogICAgLy8gY29uc3QgbWludCA9IHBvbGwuY2FsbAogICAgLy8gICAuY3JlYXRlKHsKICAgIC8vICAgICBhcmdzOiBbCiAgICAvLyAgICAgICB0aGlzLmFraXRhREFPLnZhbHVlLmlkLAogICAgLy8gICAgICAgdHlwZSwKICAgIC8vICAgICAgIGVuZFRpbWUsCiAgICAvLyAgICAgICBtYXhTZWxlY3RlZCwKICAgIC8vICAgICAgIHF1ZXN0aW9uLAogICAgLy8gICAgICAgb3B0aW9ucywKICAgIC8vICAgICAgIGdhdGVJRAogICAgLy8gICAgIF0sCiAgICAvLyAgIH0pCiAgICBwdXNoYnl0ZXMgMHg5ZmE4MzVhOCAvLyBtZXRob2QgImNyZWF0ZSh1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCxzdHJpbmcsc3RyaW5nW10sdWludDY0KXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgNQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgNAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjI5CiAgICAvLyBjb25zdCBwb2xsID0gY29tcGlsZUFyYzQoUG9sbCkKICAgIGludGNfMiAvLyA4CiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgcHVzaGludCAxMSAvLyAxMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50CiAgICBwdXNoYnl0ZXMgYmFzZTY0KEM0RUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KEN5QUZBQUVDQ01SM0pnMEpkbTkwWlhOZmIyNWxDWFp2ZEdWelgzUjNid3QyYjNSbGMxOTBhSEpsWlFwMmIzUmxjMTltYjNWeUNuWnZkR1Z6WDJacGRtVUpZV3RwZEdGZlpHRnZCSFI1Y0dVSlltOTRYMk52ZFc1MENHVnVaRjkwYVcxbEIyZGhkR1ZmYVdRTWIzQjBhVzl1WDJOdmRXNTBERzFoZUY5elpXeGxZM1JsWkFRVkgzeDFNUmhBQUJBb0ltY3BJbWNxSW1jckltY25CQ0puTVJrVVJERVlRUUEwZ2dZRTRVR1FnQVJiejVFQUJOMHduSHNFV245Sk1nUXo2U3lVQklWTjdlQTJHZ0NPQmdHY0FoWUMyd000QTFJQUFRQWpRNEFFbjZnMXFEWWFBSTRCQUFFQUlqWWFBVWtWSlJKRUZ6WWFBa2xPQWtrVkl4SkVOaG9EU1JVbEVrUVhOaG9FU1JVbEVrUVhUZ00yR2dWSklsa2tDRXNCRlJKRVZ3SUFOaG9HU1U0Q1RnVTJHZ2RKRlNVU1JCY3lEVVF5QjBzRURFUkxCQmVCS0F4RUp3VlBCbWNuQms4Rlp5Y0pUR2NuQ0U4RFo0QUljWFZsYzNScGIyNU1aeUpaU1NRUFFRRUdTWUVGRGtFQS95TkVTd09BQVJRU1FBQUpTd09BQVNnU1FRQVhTd0lrRDBFQTRFa2pDVXNERDBFQTF5TkVKd3RMQTJjbkNrc0JTVTRDWnljSEltZExBbGNDQUVsRkIwc0JSRWtpV1VwWkpBaExBazRDV0ZjQ0FJQUtiM0IwYVc5dVgyOXVaVXhuSTBzQ0RFUkpKRmxLV1NRSVdGY0NBSUFLYjNCMGFXOXVYM1IzYjB4bmdRTVBRUUFqSkVzQkRFUkxCRW1CQkZsS1dTUUlXRmNDQUlBTWIzQjBhVzl1WDNSb2NtVmxUR2RKZ1FRUFFRQWpnUU5MQVF4RVN3UkpnUVpaU2xra0NGaFhBZ0NBQzI5d2RHbHZibDltYjNWeVRHZEpnUVVQUVFBaWdRUkxBUXhFU3dSSkpWbEtXU1FJV0ZjQ0FJQUxiM0IwYVc5dVgyWnBkbVZNWnlORElrTC9KaUpDL3Y0MkdnRkhBaUpaU1U0Q2dTQUxKQWhNRlJKRU1nY2lKd2hsUkExRUlrbExBZ3hCQUZSTEFsY0NBRXNCU1U0Q2dTQUxnU0JZU2IxRkFVUkp2RWl4Z0JoTlFsSWdjbVZtZFc1a0lHWnZjaUJ3YjJ4c0lIWnZkR1d5QlNFRXNnaXlCeU95RUNLeUFiTWlKd2RsUkNNSkp3ZE1aeU1JUlFGQy82VWpReUtBQURFV0pBbEpPQkFqRWtReEZpTUpTVGdRZ1FZU1JEWWFBVWNDSWxsSlRnSkpKUXNrQ0U4Q0ZSSkVNZ2NpSndobFJBNUVNUUM5UlFFVVJJRUZEa0VBZjBsQkFIc2pSQ0luQldWRU1RQkZCeUluQ1dWTVJRZEVTd000R0V5QUEyRmhiR1ZJZ1NoYkVrRUFVVXNDT0JsQUFFcExBamdiZ1FRU1FRQkFTd0lpd2hxQUJFT1NKbFVTUVFBeFN3SWp3aHBMQmhKQkFDWkxBaVRDR2tzRkZoSkJBQm9qUkVzRFNUZ0hNZ29TVERnSUlRUVNFRVJMQVlnQXAwZ2pReUpDLytNaVF2K0NNUllqQ1VrNEVDTVNSRFlhQVVjQ0lsbEpUZ0pKSlFza0NFOENGUkpFTWdjaUp3aGxSQTVFTVFDOVJRRVVSSUVGRGtFQUpVbEJBQ0VqUkNJbkNXVkVGRVJMQWtrNEJ6SUtFa3c0Q0NFRUVoQkVTd0dJQUVaSUkwTWlRdi9jTmhvQlNSV0JJQkpFdlVVQmdBRUFJazhDVkNjTVRGQ3dJME0yR2dGSkZTVVNSQmN4QUNJbkJXVkVnQVozWVd4c1pYUmxTSElJUkJKRUp3Vk1aeU5EaWdFQklvQUFSd1VqSWljR1pVU0FBUjRTUUFBTUlpY0daVVNBQVNnU1FRQTlJaWNGWlVReEFMRk1nQU56WVd4bFNJRVFXNEFFMVhTN0VMSWFzaGl5R29FR3NoQWlzZ0d6dEQ1SlZ3UUFURmNBQkNjTUVrUkpGU1VTUkJlTUJ5SW5CbVZFZ0FFS0VrQUFEQ0luQm1WRWdBRWVFa0VBajR2L0lsa2pFa1NML3lSYlNZd0ZJaWNLWlVRakNVc0JEMFJBQUI4aUtHVkVpd2NJS0V4bk1RQWl1VWdpSndkbFJDTUlKd2RNWjR2L2pBQ0ppd1VqRWtFQURTSXBaVVNMQndncFRHZEMvOWVMQlNRU1FRQU5JaXBsUklzSENDcE1aMEwvdzRzRmdRTVNRUUFOSWl0bFJJc0hDQ3RNWjBML3Jvc0ZnUVFTUWYrbUlpY0VaVVNMQndnbkJFeG5RditYaS84aVdVbU1BU0luQzJWRURrUWlqQUtMQW9zQkRFSC9mb3YvVndJQVNZd0Fpd0pKVGdJbEMxdEpqQVlpSndwbFJDTUpEa1FqQ0VtTUE0d0Vpd1NMQVF4QkFCU0xCRWtsQzRzQVRGdUxCaE5FSXdpTUJFTC81SXNHUUFBUklpaGxSSXNIQ0NoTVo0c0RqQUpDLzZPTEJpTVNRUUFOSWlsbFJJc0hDQ2xNWjBMLzVZc0dKQkpCQUEwaUttVkVpd2NJS2t4blF2L1Jpd2FCQXhKQkFBMGlLMlZFaXdjSUsweG5Rdis4aXdhQkJCSkIvN1FpSndSbFJJc0hDQ2NFVEdkQy82VT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6NDAtNTEKICAgIC8vIGNvbnN0IG1pbnQgPSBwb2xsLmNhbGwKICAgIC8vICAgLmNyZWF0ZSh7CiAgICAvLyAgICAgYXJnczogWwogICAgLy8gICAgICAgdGhpcy5ha2l0YURBTy52YWx1ZS5pZCwKICAgIC8vICAgICAgIHR5cGUsCiAgICAvLyAgICAgICBlbmRUaW1lLAogICAgLy8gICAgICAgbWF4U2VsZWN0ZWQsCiAgICAvLyAgICAgICBxdWVzdGlvbiwKICAgIC8vICAgICAgIG9wdGlvbnMsCiAgICAvLyAgICAgICBnYXRlSUQKICAgIC8vICAgICBdLAogICAgLy8gICB9KQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjQwLTUzCiAgICAvLyBjb25zdCBtaW50ID0gcG9sbC5jYWxsCiAgICAvLyAgIC5jcmVhdGUoewogICAgLy8gICAgIGFyZ3M6IFsKICAgIC8vICAgICAgIHRoaXMuYWtpdGFEQU8udmFsdWUuaWQsCiAgICAvLyAgICAgICB0eXBlLAogICAgLy8gICAgICAgZW5kVGltZSwKICAgIC8vICAgICAgIG1heFNlbGVjdGVkLAogICAgLy8gICAgICAgcXVlc3Rpb24sCiAgICAvLyAgICAgICBvcHRpb25zLAogICAgLy8gICAgICAgZ2F0ZUlECiAgICAvLyAgICAgXSwKICAgIC8vICAgfSkKICAgIC8vICAgLml0eG4KICAgIC8vICAgLmNyZWF0ZWRBcHAKICAgIGdpdHhuIDAgQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo1NS02MAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IG1pbnQuYWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IEdsb2JhbC5taW5CYWxhbmNlCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjU3CiAgICAvLyByZWNlaXZlcjogbWludC5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6NTgKICAgIC8vIGFtb3VudDogR2xvYmFsLm1pbkJhbGFuY2UKICAgIGdsb2JhbCBNaW5CYWxhbmNlCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjU1LTU5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogbWludC5hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLm1pbkJhbGFuY2UKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo1NS02MAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IG1pbnQuYWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IEdsb2JhbC5taW5CYWxhbmNlCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czoxOS0yNwogICAgLy8gbmV3KAogICAgLy8gICBwYXltZW50OiBndHhuLlBheW1lbnRUeG4sCiAgICAvLyAgIHR5cGU6IFBvbGxUeXBlLAogICAgLy8gICBlbmRUaW1lOiB1aW50NjQsCiAgICAvLyAgIG1heFNlbGVjdGVkOiB1aW50NjQsCiAgICAvLyAgIHF1ZXN0aW9uOiBzdHJpbmcsCiAgICAvLyAgIG9wdGlvbnM6IHN0cmluZ1tdLAogICAgLy8gICBnYXRlSUQ6IHVpbnQ2NCwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjpQb2xsRmFjdG9yeS5uZXdQb2xsQ29zdFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm5ld1BvbGxDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjY5LTcxCiAgICAvLyBNSU5fUFJPR1JBTV9QQUdFUyArCiAgICAvLyAoR0xPQkFMX1NUQVRFX0tFWV9VSU5UX0NPU1QgKiBwb2xsLmdsb2JhbFVpbnRzKSArCiAgICAvLyAoR0xPQkFMX1NUQVRFX0tFWV9CWVRFU19DT1NUICogcG9sbC5nbG9iYWxCeXRlcykgKwogICAgaW50YyA0IC8vIDgxMzUwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BvbGwvZmFjdG9yeS5hbGdvLnRzOjcyCiAgICAvLyBHbG9iYWwubWluQmFsYW5jZQogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wb2xsL2ZhY3RvcnkuYWxnby50czo2OS03MgogICAgLy8gTUlOX1BST0dSQU1fUEFHRVMgKwogICAgLy8gKEdMT0JBTF9TVEFURV9LRVlfVUlOVF9DT1NUICogcG9sbC5nbG9iYWxVaW50cykgKwogICAgLy8gKEdMT0JBTF9TVEFURV9LRVlfQllURVNfQ09TVCAqIHBvbGwuZ2xvYmFsQnl0ZXMpICsKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcG9sbC9mYWN0b3J5LmFsZ28udHM6NjUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjpGYWN0b3J5Q29udHJhY3QuaW5pdEJveGVkQ29udHJhY3Rbcm91dGluZ10oKSAtPiB2b2lkOgppbml0Qm94ZWRDb250cmFjdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjQyCiAgICAvLyBpbml0Qm94ZWRDb250cmFjdCh2ZXJzaW9uOiBzdHJpbmcsIHNpemU6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6MzQKICAgIC8vIGNoaWxkQ29udHJhY3RWZXJzaW9uID0gR2xvYmFsU3RhdGU8c3RyaW5nPih7IGtleTogQmFzZUZhY3RvcnlHbG9iYWxTdGF0ZUtleUNoaWxkQ29udHJhY3RWZXJzaW9uIH0pCiAgICBieXRlYyA3IC8vICJjaGlsZF9jb250cmFjdF92ZXJzaW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NDMKICAgIC8vIHRoaXMuY2hpbGRDb250cmFjdFZlcnNpb24udmFsdWUgPSB2ZXJzaW9uCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6MzgKICAgIC8vIGJveGVkQ29udHJhY3QgPSBCb3g8Ynl0ZXM+KHsga2V5OiBCb3hLZXlCb3hlZENvbnRyYWN0IH0pCiAgICBieXRlY18xIC8vICJiYyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjQ0CiAgICAvLyBpZiAoIXRoaXMuYm94ZWRDb250cmFjdC5leGlzdHMpIHsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYm56IGluaXRCb3hlZENvbnRyYWN0X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo0NQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcywgRVJSX05PVF9BS0lUQV9EQU8pCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgQWtpdGEgREFPIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjM4CiAgICAvLyBib3hlZENvbnRyYWN0ID0gQm94PGJ5dGVzPih7IGtleTogQm94S2V5Qm94ZWRDb250cmFjdCB9KQogICAgYnl0ZWNfMSAvLyAiYmMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo0NgogICAgLy8gdGhpcy5ib3hlZENvbnRyYWN0LmNyZWF0ZSh7IHNpemUgfSkKICAgIHN3YXAKICAgIGJveF9jcmVhdGUKICAgIHBvcAoKaW5pdEJveGVkQ29udHJhY3RfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NDIKICAgIC8vIGluaXRCb3hlZENvbnRyYWN0KHZlcnNpb246IHN0cmluZywgc2l6ZTogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgppbml0Qm94ZWRDb250cmFjdF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjQ4CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ5dGVjXzIgLy8gIndhbGxldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjQ4CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IHRoZSBBa2l0YSBEQU8gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6MzgKICAgIC8vIGJveGVkQ29udHJhY3QgPSBCb3g8Ynl0ZXM+KHsga2V5OiBCb3hLZXlCb3hlZENvbnRyYWN0IH0pCiAgICBieXRlY18xIC8vICJiYyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjQ5CiAgICAvLyB0aGlzLmJveGVkQ29udHJhY3QucmVzaXplKHNpemUpCiAgICBzd2FwCiAgICBib3hfcmVzaXplCiAgICBiIGluaXRCb3hlZENvbnRyYWN0X2FmdGVyX2lmX2Vsc2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjpGYWN0b3J5Q29udHJhY3QubG9hZEJveGVkQ29udHJhY3Rbcm91dGluZ10oKSAtPiB2b2lkOgpsb2FkQm94ZWRDb250cmFjdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjUzCiAgICAvLyBsb2FkQm94ZWRDb250cmFjdChvZmZzZXQ6IHVpbnQ2NCwgZGF0YTogYnl0ZXMpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50OFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjU0CiAgICAvLyBjb25zdCBleHBlY3RlZFByZXZpb3VzQ2FsbHM6IHVpbnQ2NCA9IG9mZnNldCAvIDIwMzIKICAgIHB1c2hpbnQgMjAzMiAvLyAyMDMyCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1NQogICAgLy8gY29uc3QgdHhuID0gZ3R4bi5UcmFuc2FjdGlvbihUeG4uZ3JvdXBJbmRleCAtIGV4cGVjdGVkUHJldmlvdXNDYWxscyAtIDEpCiAgICB0eG4gR3JvdXBJbmRleAogICAgc3dhcAogICAgLQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NTcKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1Ny01OAogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICBieiBsb2FkQm94ZWRDb250cmFjdF9ib29sX2ZhbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjU4CiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgZHVwCiAgICBndHhucyBBcHBsaWNhdGlvbklECiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1Ny01OAogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICBieiBsb2FkQm94ZWRDb250cmFjdF9ib29sX2ZhbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjU5CiAgICAvLyAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMwogICAgZHVwCiAgICBndHhucyBOdW1BcHBBcmdzCiAgICBwdXNoaW50IDMgLy8gMwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjU3LTU5CiAgICAvLyB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgLy8gJiYgdHhuLmFwcElkID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQKICAgIC8vICYmIHR4bi5udW1BcHBBcmdzID09PSAzCiAgICBieiBsb2FkQm94ZWRDb250cmFjdF9ib29sX2ZhbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjYwCiAgICAvLyAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIGR1cAogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1Ny02MAogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICAvLyAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMwogICAgLy8gJiYgdHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wCiAgICBibnogbG9hZEJveGVkQ29udHJhY3RfYm9vbF9mYWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo2MQogICAgLy8gJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKHRoaXMuaW5pdEJveGVkQ29udHJhY3QpCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBndHhuc2FzIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZWMgNSAvLyBtZXRob2QgImluaXRCb3hlZENvbnRyYWN0KHN0cmluZyx1aW50NjQpdm9pZCIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1Ny02MQogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICAvLyAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMwogICAgLy8gJiYgdHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wCiAgICAvLyAmJiB0eG4uYXBwQXJncygwKSA9PT0gbWV0aG9kU2VsZWN0b3IodGhpcy5pbml0Qm94ZWRDb250cmFjdCkKICAgIGJ6IGxvYWRCb3hlZENvbnRyYWN0X2Jvb2xfZmFsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NjIKICAgIC8vICYmIHR4bi5zZW5kZXIgPT09IFR4bi5zZW5kZXIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NTctNjIKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gJiYgdHhuLm51bUFwcEFyZ3MgPT09IDMKICAgIC8vICYmIHR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcAogICAgLy8gJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKHRoaXMuaW5pdEJveGVkQ29udHJhY3QpCiAgICAvLyAmJiB0eG4uc2VuZGVyID09PSBUeG4uc2VuZGVyCiAgICBieiBsb2FkQm94ZWRDb250cmFjdF9ib29sX2ZhbHNlQDgKICAgIGludGNfMSAvLyAxCgpsb2FkQm94ZWRDb250cmFjdF9ib29sX21lcmdlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo1Ni02MwogICAgLy8gYXNzZXJ0KCgKICAgIC8vICAgdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICAgJiYgdHhuLmFwcElkID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQKICAgIC8vICAgJiYgdHhuLm51bUFwcEFyZ3MgPT09IDMKICAgIC8vICAgJiYgdHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wCiAgICAvLyAgICYmIHR4bi5hcHBBcmdzKDApID09PSBtZXRob2RTZWxlY3Rvcih0aGlzLmluaXRCb3hlZENvbnRyYWN0KQogICAgLy8gICAmJiB0eG4uc2VuZGVyID09PSBUeG4uc2VuZGVyCiAgICAvLyApLCBFUlJfSU5WQUxJRF9DQUxMX09SREVSKQogICAgYXNzZXJ0IC8vIEludmFsaWQgY2FsbCBvcmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6MzgKICAgIC8vIGJveGVkQ29udHJhY3QgPSBCb3g8Ynl0ZXM+KHsga2V5OiBCb3hLZXlCb3hlZENvbnRyYWN0IH0pCiAgICBieXRlY18xIC8vICJiYyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5ib3hlZENvbnRyYWN0LmV4aXN0cywgRVJSX0NPTlRSQUNUX05PVF9TRVQpCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBDb250cmFjdCBub3Qgc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czozOAogICAgLy8gYm94ZWRDb250cmFjdCA9IEJveDxieXRlcz4oeyBrZXk6IEJveEtleUJveGVkQ29udHJhY3QgfSkKICAgIGJ5dGVjXzEgLy8gImJjIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2ZhY3RvcnkudHM6NjUKICAgIC8vIHRoaXMuYm94ZWRDb250cmFjdC5yZXBsYWNlKG9mZnNldCwgZGF0YSkKICAgIGRpZyAzCiAgICBkaWcgMwogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjUzCiAgICAvLyBsb2FkQm94ZWRDb250cmFjdChvZmZzZXQ6IHVpbnQ2NCwgZGF0YTogYnl0ZXMpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmxvYWRCb3hlZENvbnRyYWN0X2Jvb2xfZmFsc2VAODoKICAgIGludGNfMCAvLyAwCiAgICBiIGxvYWRCb3hlZENvbnRyYWN0X2Jvb2xfbWVyZ2VAOQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjpGYWN0b3J5Q29udHJhY3QuZGVsZXRlQm94ZWRDb250cmFjdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlbGV0ZUJveGVkQ29udHJhY3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo2OQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuZ2V0QWtpdGFEQU9XYWxsZXQoKS5hZGRyZXNzLCBFUlJfTk9UX0FLSVRBX0RBTykKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjMyCiAgICAvLyBjb25zdCBbd2FsbGV0SURdID0gb3AuQXBwR2xvYmFsLmdldEV4VWludDY0KHRoaXMuYWtpdGFEQU8udmFsdWUsIEJ5dGVzKEFraXRhREFPR2xvYmFsU3RhdGVLZXlzV2FsbGV0KSkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyOQogICAgLy8gYWtpdGFEQU8gPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFEQU8gfSkKICAgIGJ5dGVjXzAgLy8gImFraXRhX2RhbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjMyCiAgICAvLyBjb25zdCBbd2FsbGV0SURdID0gb3AuQXBwR2xvYmFsLmdldEV4VWludDY0KHRoaXMuYWtpdGFEQU8udmFsdWUsIEJ5dGVzKEFraXRhREFPR2xvYmFsU3RhdGVLZXlzV2FsbGV0KSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBieXRlY18yIC8vICJ3YWxsZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo2OQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuZ2V0QWtpdGFEQU9XYWxsZXQoKS5hZGRyZXNzLCBFUlJfTk9UX0FLSVRBX0RBTykKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgQWtpdGEgREFPIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjM4CiAgICAvLyBib3hlZENvbnRyYWN0ID0gQm94PGJ5dGVzPih7IGtleTogQm94S2V5Qm94ZWRDb250cmFjdCB9KQogICAgYnl0ZWNfMSAvLyAiYmMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvZmFjdG9yeS50czo3MAogICAgLy8gdGhpcy5ib3hlZENvbnRyYWN0LmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9mYWN0b3J5LnRzOjY4CiAgICAvLyBkZWxldGVCb3hlZENvbnRyYWN0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjpBa2l0YUZlZUdlbmVyYXRvckNvbnRyYWN0V2l0aE9wdEluLm9wdEluW3JvdXRpbmddKCkgLT4gdm9pZDoKb3B0SW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNTAKICAgIC8vIG9wdEluKHBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwgYXNzZXQ6IEFzc2V0KTogdm9pZCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNTIKICAgIC8vIGNvbnN0IGNvdW50ID0gc3BsaXRPcHRJbkNvdW50KHRoaXMuYWtpdGFEQU8udmFsdWUsIHRoaXMuYWtpdGFEQU9Fc2Nyb3cudmFsdWUuYWRkcmVzcywgYXNzZXQpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MjkKICAgIC8vIGFraXRhREFPID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBHbG9iYWxTdGF0ZUtleUFraXRhREFPIH0pCiAgICBieXRlY18wIC8vICJha2l0YV9kYW8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNTIKICAgIC8vIGNvbnN0IGNvdW50ID0gc3BsaXRPcHRJbkNvdW50KHRoaXMuYWtpdGFEQU8udmFsdWUsIHRoaXMuYWtpdGFEQU9Fc2Nyb3cudmFsdWUuYWRkcmVzcywgYXNzZXQpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjY1CiAgICAvLyBha2l0YURBT0VzY3JvdyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YUVzY3JvdyB9KQogICAgYnl0ZWNfMyAvLyAiYWtpdGFfZXNjcm93IgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTUyCiAgICAvLyBjb25zdCBjb3VudCA9IHNwbGl0T3B0SW5Db3VudCh0aGlzLmFraXRhREFPLnZhbHVlLCB0aGlzLmFraXRhREFPRXNjcm93LnZhbHVlLmFkZHJlc3MsIGFzc2V0KQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGRpZyAyCiAgICBjYWxsc3ViIHNwbGl0T3B0SW5Db3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTU0LTE2MQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiAoMSArIGNvdW50KSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDIKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNTcKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNTQtMTYxCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IEdsb2JhbC5hc3NldE9wdEluTWluQmFsYW5jZSAqICgxICsgY291bnQpLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgdW5jb3ZlciAzCiAgICBndHhucyBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjE1OAogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiAoMSArIGNvdW50KSwKICAgIGdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgNAogICAgKwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTU0LTE2MQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiAoMSArIGNvdW50KSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gSW52YWxpZCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNjMtMTY5CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTY1CiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTY2CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjE2My0xNjgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjE2My0xNjkKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXQKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTUwCiAgICAvLyBvcHRJbihwYXltZW50OiBndHhuLlBheW1lbnRUeG4sIGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjpBa2l0YUZlZUdlbmVyYXRvckNvbnRyYWN0V2l0aE9wdEluLm9wdEluQ29zdFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjE3MgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTc0CiAgICAvLyBjb25zdCBjb3VudCA9IHNwbGl0T3B0SW5Db3VudCh0aGlzLmFraXRhREFPLnZhbHVlLCB0aGlzLmFraXRhREFPRXNjcm93LnZhbHVlLmFkZHJlc3MsIGFzc2V0KQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTc0CiAgICAvLyBjb25zdCBjb3VudCA9IHNwbGl0T3B0SW5Db3VudCh0aGlzLmFraXRhREFPLnZhbHVlLCB0aGlzLmFraXRhREFPRXNjcm93LnZhbHVlLmFkZHJlc3MsIGFzc2V0KQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo2NQogICAgLy8gYWtpdGFEQU9Fc2Nyb3cgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFFc2Nyb3cgfSkKICAgIGJ5dGVjXzMgLy8gImFraXRhX2VzY3JvdyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjE3NAogICAgLy8gY29uc3QgY291bnQgPSBzcGxpdE9wdEluQ291bnQodGhpcy5ha2l0YURBTy52YWx1ZSwgdGhpcy5ha2l0YURBT0VzY3Jvdy52YWx1ZS5hZGRyZXNzLCBhc3NldCkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc3BsaXRPcHRJbkNvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNzUKICAgIC8vIHJldHVybiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiAoMSArIGNvdW50KQogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAyCiAgICArCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoxNzIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjpBa2l0YUJhc2VGZWVHZW5lcmF0b3JDb250cmFjdC51cGRhdGVBa2l0YURBT0VzY3Jvd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZUFraXRhREFPRXNjcm93OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTM3CiAgICAvLyB1cGRhdGVBa2l0YURBT0VzY3JvdyhhcHA6IEFwcGxpY2F0aW9uKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTM4CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ5dGVjXzIgLy8gIndhbGxldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjEzOAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuZ2V0QWtpdGFEQU9XYWxsZXQoKS5hZGRyZXNzLCBFUlJfTk9UX0FLSVRBX0RBTykKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgQWtpdGEgREFPIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjY1CiAgICAvLyBha2l0YURBT0VzY3JvdyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YUVzY3JvdyB9KQogICAgYnl0ZWNfMyAvLyAiYWtpdGFfZXNjcm93IgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTM5CiAgICAvLyB0aGlzLmFraXRhREFPRXNjcm93LnZhbHVlID0gYXBwCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MTM3CiAgICAvLyB1cGRhdGVBa2l0YURBT0VzY3JvdyhhcHA6IEFwcGxpY2F0aW9uKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6OlVwZ3JhZGVhYmxlQWtpdGFCYXNlQ29udHJhY3QudXBkYXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6NDgKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsnVXBkYXRlQXBwbGljYXRpb24nXSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo1MAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuZ2V0QWtpdGFEQU9XYWxsZXQoKS5hZGRyZXNzLCBFUlJfTk9UX0FLSVRBX0RBTykKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjMyCiAgICAvLyBjb25zdCBbd2FsbGV0SURdID0gb3AuQXBwR2xvYmFsLmdldEV4VWludDY0KHRoaXMuYWtpdGFEQU8udmFsdWUsIEJ5dGVzKEFraXRhREFPR2xvYmFsU3RhdGVLZXlzV2FsbGV0KSkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyOQogICAgLy8gYWtpdGFEQU8gPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5QWtpdGFEQU8gfSkKICAgIGJ5dGVjXzAgLy8gImFraXRhX2RhbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjMyCiAgICAvLyBjb25zdCBbd2FsbGV0SURdID0gb3AuQXBwR2xvYmFsLmdldEV4VWludDY0KHRoaXMuYWtpdGFEQU8udmFsdWUsIEJ5dGVzKEFraXRhREFPR2xvYmFsU3RhdGVLZXlzV2FsbGV0KSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkdXAKICAgIGJ5dGVjXzIgLy8gIndhbGxldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjUwCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgdGhlIEFraXRhIERBTyBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvZnVuY3Rpb25zLnRzOjU0CiAgICAvLyBjb25zdCBbcGx1Z2luQXBwTGlzdEJ5dGVzXSA9IG9wLkFwcEdsb2JhbC5nZXRFeEJ5dGVzKGFraXRhREFPLCBCeXRlcyhBa2l0YURBT0dsb2JhbFN0YXRlS2V5c1BsdWdpbkFwcExpc3QpKQogICAgcHVzaGJ5dGVzICJwYWwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo1MQogICAgLy8gY29uc3QgdXBkYXRlUGx1Z2luID0gZ2V0UGx1Z2luQXBwTGlzdCh0aGlzLmFraXRhREFPLnZhbHVlKS51cGRhdGUKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo1MgogICAgLy8gYXNzZXJ0KEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkID09PSB1cGRhdGVQbHVnaW4sIEVSUl9JTlZBTElEX1VQR1JBREUpCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgPT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIGFwcCB1cGdyYWRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyNwogICAgLy8gdmVyc2lvbiA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5VmVyc2lvbiB9KQogICAgYnl0ZWMgNiAvLyAidmVyc2lvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjUzCiAgICAvLyB0aGlzLnZlcnNpb24udmFsdWUgPSBuZXdWZXJzaW9uCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6NDgKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsnVXBkYXRlQXBwbGljYXRpb24nXSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjpBa2l0YUJhc2VDb250cmFjdC51cGRhdGVBa2l0YURBT1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZUFraXRhREFPOgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzgKICAgIC8vIHVwZGF0ZUFraXRhREFPKGFraXRhREFPOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjM5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWNfMCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzIKICAgIC8vIGNvbnN0IFt3YWxsZXRJRF0gPSBvcC5BcHBHbG9iYWwuZ2V0RXhVaW50NjQodGhpcy5ha2l0YURBTy52YWx1ZSwgQnl0ZXMoQWtpdGFEQU9HbG9iYWxTdGF0ZUtleXNXYWxsZXQpKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ5dGVjXzIgLy8gIndhbGxldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjM5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5nZXRBa2l0YURBT1dhbGxldCgpLmFkZHJlc3MsIEVSUl9OT1RfQUtJVEFfREFPKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IHRoZSBBa2l0YSBEQU8gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MjkKICAgIC8vIGFraXRhREFPID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBHbG9iYWxTdGF0ZUtleUFraXRhREFPIH0pCiAgICBieXRlY18wIC8vICJha2l0YV9kYW8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czo0MAogICAgLy8gdGhpcy5ha2l0YURBTy52YWx1ZSA9IGFraXRhREFPCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzgKICAgIC8vIHVwZGF0ZUFraXRhREFPKGFraXRhREFPOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=\",\"clear\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==\"},\"byteCode\":{\"approval\":\"CyAFAAEIArzTMSYICWFraXRhX2RhbwJiYwZ3YWxsZXQMYWtpdGFfZXNjcm93BBUffHUExTsyzAd2ZXJzaW9uFmNoaWxkX2NvbnRyYWN0X3ZlcnNpb26ABOqRgN02GgCOAQBmMRkURDEYQQBPggIEEZvGmASDZhcDJwWCBwTcothiBNNGsaQEOU6usgQz94gIBB6tIKkEM+kslASFTe3gNhoAjgoAjwdUB2EHpggSCCUIcgiaCOsAAQAjQ4AExCb0ujYaAI4BADoAMRmBBBIxGBBEQgiZigMBIov+i/9wAEUBQAAai/2ADnJldmVudWVfc3BsaXRzZUgiWSMIjACLAEyJNhoBSSJZJQhLARUSRFcCADYaAkkiWSUISwEVEkRXAgA2GgNJFSQSRBc2GgRJFSQSRBcnBk8EZycHTwNnKE8CZytMZyNDMRYjCUk4ECMSRDYaAUkVIxJENhoCSRUkEkQ2GgNJFSQSRDYaBEkiWSUISwEVEkQ2GgU2GgZJFSQSREsGOAcyChJPBzgIIQQyAQgSEESxIihlRBaABJ+oNaiyGrIaTwWyGk8EshpPA7IaTwKyGkyyGrIaJLI1gQuyNIAEC4EBQ7JCgJcMCyAFAAECCMR3Jg0Jdm90ZXNfb25lCXZvdGVzX3R3bwt2b3Rlc190aHJlZQp2b3Rlc19mb3VyCnZvdGVzX2ZpdmUJYWtpdGFfZGFvBHR5cGUJYm94X2NvdW50CGVuZF90aW1lB2dhdGVfaWQMb3B0aW9uX2NvdW50DG1heF9zZWxlY3RlZAQVH3x1MRhAABAoImcpImcqImcrImcnBCJnMRkURDEYQQA0ggYE4UGQgARbz5EABN0wnHsEWn9JMgQz6SyUBIVN7eA2GgCOBgGcAhYC2wM4A1IAAQAjQ4AEn6g1qDYaAI4BAAEAIjYaAUkVJRJEFzYaAklOAkkVIxJENhoDSRUlEkQXNhoESRUlEkQXTgM2GgVJIlkkCEsBFRJEVwIANhoGSU4CTgU2GgdJFSUSRBcyDUQyB0sEDERLBBeBKAxEJwVPBmcnBk8FZycJTGcnCE8DZ4AIcXVlc3Rpb25MZyJZSSQPQQEGSYEFDkEA/yNESwOAARQSQAAJSwOAASgSQQAXSwIkD0EA4EkjCUsDD0EA1yNEJwtLA2cnCksBSU4CZycHImdLAlcCAElFB0sBREkiWUpZJAhLAk4CWFcCAIAKb3B0aW9uX29uZUxnI0sCDERJJFlKWSQIWFcCAIAKb3B0aW9uX3R3b0xngQMPQQAjJEsBDERLBEmBBFlKWSQIWFcCAIAMb3B0aW9uX3RocmVlTGdJgQQPQQAjgQNLAQxESwRJgQZZSlkkCFhXAgCAC29wdGlvbl9mb3VyTGdJgQUPQQAigQRLAQxESwRJJVlKWSQIWFcCAIALb3B0aW9uX2ZpdmVMZyNDIkL/JiJC/v42GgFHAiJZSU4CgSALJAhMFRJEMgciJwhlRA1EIklLAgxBAFRLAlcCAEsBSU4CgSALgSBYSb1FAURJvEixgBhNQlIgcmVmdW5kIGZvciBwb2xsIHZvdGWyBSEEsgiyByOyECKyAbMiJwdlRCMJJwdMZyMIRQFC/6UjQyKAADEWJAlJOBAjEkQxFiMJSTgQgQYSRDYaAUcCIllJTgJJJQskCE8CFRJEMgciJwhlRA5EMQC9RQEURIEFDkEAf0lBAHsjRCInBWVEMQBFByInCWVMRQdESwM4GEyAA2FhbGVIgShbEkEAUUsCOBlAAEpLAjgbgQQSQQBASwIiwhqABEOSJlUSQQAxSwIjwhpLBhJBACZLAiTCGksFFhJBABojREsDSTgHMgoSTDgIIQQSEERLAYgAp0gjQyJC/+MiQv+CMRYjCUk4ECMSRDYaAUcCIllJTgJJJQskCE8CFRJEMgciJwhlRA5EMQC9RQEURIEFDkEAJUlBACEjRCInCWVEFERLAkk4BzIKEkw4CCEEEhBESwGIAEZII0MiQv/cNhoBSRWBIBJEvUUBgAEAIk8CVCcMTFCwI0M2GgFJFSUSRBcxACInBWVEgAZ3YWxsZXRlSHIIRBJEJwVMZyNDigEBIoAARwUjIicGZUSAAR4SQAAMIicGZUSAASgSQQA9IicFZUQxALFMgANzYWxlSIEQW4AE1XS7ELIashiyGoEGshAisgGztD5JVwQATFcABCcMEkRJFSUSRBeMByInBmVEgAEKEkAADCInBmVEgAEeEkEAj4v/IlkjEkSL/yRbSYwFIicKZUQjCUsBD0RAAB8iKGVEiwcIKExnMQAiuUgiJwdlRCMIJwdMZ4v/jACJiwUjEkEADSIpZUSLBwgpTGdC/9eLBSQSQQANIiplRIsHCCpMZ0L/w4sFgQMSQQANIitlRIsHCCtMZ0L/rosFgQQSQf+mIicEZUSLBwgnBExnQv+Xi/8iWUmMASInC2VEDkQijAKLAosBDEH/fov/VwIASYwAiwJJTgIlC1tJjAYiJwplRCMJDkQjCEmMA4wEiwSLAQxBABSLBEklC4sATFuLBhNEIwiMBEL/5IsGQAARIihlRIsHCChMZ4sDjAJC/6OLBiMSQQANIillRIsHCClMZ0L/5YsGJBJBAA0iKmVEiwcIKkxnQv/RiwaBAxJBAA0iK2VEiwcIK0xnQv+8iwaBBBJB/7QiJwRlRIsHCCcETGdC/6WyQCKyGYEGshAisgGztwA9sUlyCEQyAbIIsgcjshAisgGzFicETFCwI0MhBDIBCBYnBExQsCNDNhoBSSJZJQhLARUSRFcCADYaAkkVJBJEF0wnB0xnKb1FAUAADDEAMgkSRClMuUgjQzEAIihlRCplSHIIRBJEKUzTQv/qNhoBSRUkEkQXSTYaAkkiWSUISwEVEkRXAgBMgfAPCjEWTAkjCUk4EIEGEkEAOkk4GDIIEkEAMUk4G4EDEkEAKEk4GUAAIkkiwhonBRJBABhJOAAxABJBAA8jRCm9RQFEKUsDSwO7I0MiQv/uMQAiKGVEKmVIcghEEkQpvEgjQzEWIwlJOBAjEkQ2GgFJFSQSRBciKGVEIitlRHIIREsCiPfVSwI4BzIKEk8DOAgyECNPBAgLEhBEsTIKTLIRIrISshSBBLIQIrIBsyNDNhoBSRUkEkQXIihlRCIrZURyCERPAoj3kjIQI08CCAsWJwRMULAjQzYaAUkVJBJEFzEAIihlRCplSHIIRBJEK0xnI0M2GgFJIlklCEsBFRJEVwIAMQAiKGVESSplSHIIRE8CEkSAA3BhbGVIgRBbMg0SRCcGTGcjQzYaAUkVJBJEFzEAIihlRCplSHIIRBJEKExnI0M=\",\"clear\":\"C4EBQw==\"},\"events\":[],\"templateVariables\":{}} as unknown as Arc56Contract\n\n/**\n * A state record containing binary data\n */\nexport interface BinaryState {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array | undefined\n /**\n * Gets the state value as a string\n */\n asString(): string | undefined\n}\n\nclass BinaryStateValue implements BinaryState {\n constructor(private value: Uint8Array | undefined) {}\n\n asByteArray(): Uint8Array | undefined {\n return this.value\n }\n\n asString(): string | undefined {\n return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined\n }\n}\n\n/**\n * Expands types for IntelliSense so they are more human readable\n * See https://stackoverflow.com/a/69288824\n */\nexport type Expand<T> = T extends (...args: infer A) => infer R\n ? (...args: Expand<A>) => Expand<R>\n : T extends infer O\n ? { [K in keyof O]: O[K] }\n : never\n\n\n/**\n * The argument types for the PollFactory contract\n */\nexport type PollFactoryArgs = {\n /**\n * The object representation of the arguments for each method\n */\n obj: {\n 'create(string,string,uint64,uint64)void': {\n version: string\n childVersion: string\n akitaDao: bigint | number\n akitaDaoEscrow: bigint | number\n }\n 'new(pay,uint8,uint64,uint64,string,string[],uint64)uint64': {\n payment: AppMethodCallTransactionArgument\n type: bigint | number\n endTime: bigint | number\n maxSelected: bigint | number\n question: string\n options: string[]\n gateId: bigint | number\n }\n 'newPollCost()uint64': Record<string, never>\n 'initBoxedContract(string,uint64)void': {\n version: string\n size: bigint | number\n }\n 'loadBoxedContract(uint64,byte[])void': {\n offset: bigint | number\n data: Uint8Array\n }\n 'deleteBoxedContract()void': Record<string, never>\n 'optIn(pay,uint64)void': {\n /**\n * The payment transaction\n */\n payment: AppMethodCallTransactionArgument\n /**\n * The asset to be opted into\n */\n asset: bigint | number\n }\n 'optInCost(uint64)uint64': {\n asset: bigint | number\n }\n 'updateAkitaDAOEscrow(uint64)void': {\n app: bigint | number\n }\n 'update(string)void': {\n newVersion: string\n }\n 'updateAkitaDAO(uint64)void': {\n akitaDao: bigint | number\n }\n 'opUp()void': Record<string, never>\n }\n /**\n * The tuple representation of the arguments for each method\n */\n tuple: {\n 'create(string,string,uint64,uint64)void': [version: string, childVersion: string, akitaDao: bigint | number, akitaDaoEscrow: bigint | number]\n 'new(pay,uint8,uint64,uint64,string,string[],uint64)uint64': [payment: AppMethodCallTransactionArgument, type: bigint | number, endTime: bigint | number, maxSelected: bigint | number, question: string, options: string[], gateId: bigint | number]\n 'newPollCost()uint64': []\n 'initBoxedContract(string,uint64)void': [version: string, size: bigint | number]\n 'loadBoxedContract(uint64,byte[])void': [offset: bigint | number, data: Uint8Array]\n 'deleteBoxedContract()void': []\n 'optIn(pay,uint64)void': [payment: AppMethodCallTransactionArgument, asset: bigint | number]\n 'optInCost(uint64)uint64': [asset: bigint | number]\n 'updateAkitaDAOEscrow(uint64)void': [app: bigint | number]\n 'update(string)void': [newVersion: string]\n 'updateAkitaDAO(uint64)void': [akitaDao: bigint | number]\n 'opUp()void': []\n }\n}\n\n/**\n * The return type for each method\n */\nexport type PollFactoryReturns = {\n 'create(string,string,uint64,uint64)void': void\n 'new(pay,uint8,uint64,uint64,string,string[],uint64)uint64': bigint\n 'newPollCost()uint64': bigint\n 'initBoxedContract(string,uint64)void': void\n 'loadBoxedContract(uint64,byte[])void': void\n 'deleteBoxedContract()void': void\n 'optIn(pay,uint64)void': void\n 'optInCost(uint64)uint64': bigint\n 'updateAkitaDAOEscrow(uint64)void': void\n 'update(string)void': void\n 'updateAkitaDAO(uint64)void': void\n 'opUp()void': void\n}\n\n/**\n * Defines the types of available calls and state of the PollFactory smart contract.\n */\nexport type PollFactoryTypes = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods:\n & Record<'create(string,string,uint64,uint64)void' | 'create', {\n argsObj: PollFactoryArgs['obj']['create(string,string,uint64,uint64)void']\n argsTuple: PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']\n returns: PollFactoryReturns['create(string,string,uint64,uint64)void']\n }>\n & Record<'new(pay,uint8,uint64,uint64,string,string[],uint64)uint64' | 'new', {\n argsObj: PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']\n argsTuple: PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']\n returns: PollFactoryReturns['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']\n }>\n & Record<'newPollCost()uint64' | 'newPollCost', {\n argsObj: PollFactoryArgs['obj']['newPollCost()uint64']\n argsTuple: PollFactoryArgs['tuple']['newPollCost()uint64']\n returns: PollFactoryReturns['newPollCost()uint64']\n }>\n & Record<'initBoxedContract(string,uint64)void' | 'initBoxedContract', {\n argsObj: PollFactoryArgs['obj']['initBoxedContract(string,uint64)void']\n argsTuple: PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']\n returns: PollFactoryReturns['initBoxedContract(string,uint64)void']\n }>\n & Record<'loadBoxedContract(uint64,byte[])void' | 'loadBoxedContract', {\n argsObj: PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void']\n argsTuple: PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']\n returns: PollFactoryReturns['loadBoxedContract(uint64,byte[])void']\n }>\n & Record<'deleteBoxedContract()void' | 'deleteBoxedContract', {\n argsObj: PollFactoryArgs['obj']['deleteBoxedContract()void']\n argsTuple: PollFactoryArgs['tuple']['deleteBoxedContract()void']\n returns: PollFactoryReturns['deleteBoxedContract()void']\n }>\n & Record<'optIn(pay,uint64)void' | 'optIn', {\n argsObj: PollFactoryArgs['obj']['optIn(pay,uint64)void']\n argsTuple: PollFactoryArgs['tuple']['optIn(pay,uint64)void']\n returns: PollFactoryReturns['optIn(pay,uint64)void']\n }>\n & Record<'optInCost(uint64)uint64' | 'optInCost', {\n argsObj: PollFactoryArgs['obj']['optInCost(uint64)uint64']\n argsTuple: PollFactoryArgs['tuple']['optInCost(uint64)uint64']\n returns: PollFactoryReturns['optInCost(uint64)uint64']\n }>\n & Record<'updateAkitaDAOEscrow(uint64)void' | 'updateAkitaDAOEscrow', {\n argsObj: PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void']\n argsTuple: PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']\n returns: PollFactoryReturns['updateAkitaDAOEscrow(uint64)void']\n }>\n & Record<'update(string)void' | 'update', {\n argsObj: PollFactoryArgs['obj']['update(string)void']\n argsTuple: PollFactoryArgs['tuple']['update(string)void']\n returns: PollFactoryReturns['update(string)void']\n }>\n & Record<'updateAkitaDAO(uint64)void' | 'updateAkitaDAO', {\n argsObj: PollFactoryArgs['obj']['updateAkitaDAO(uint64)void']\n argsTuple: PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']\n returns: PollFactoryReturns['updateAkitaDAO(uint64)void']\n }>\n & Record<'opUp()void' | 'opUp', {\n argsObj: PollFactoryArgs['obj']['opUp()void']\n argsTuple: PollFactoryArgs['tuple']['opUp()void']\n returns: PollFactoryReturns['opUp()void']\n }>\n /**\n * Defines the shape of the state of the application.\n */\n state: {\n global: {\n keys: {\n /**\n * the current version of the child contract\n */\n childContractVersion: string\n /**\n * the app ID for the akita DAO escrow to use\n */\n akitaDaoEscrow: bigint\n /**\n * the current version of the contract\n */\n version: string\n /**\n * the app ID of the Akita DAO\n */\n akitaDao: bigint\n }\n maps: {}\n }\n box: {\n keys: {\n boxedContract: BinaryState\n }\n maps: {}\n }\n }\n}\n\n/**\n * Defines the possible abi call signatures.\n */\nexport type PollFactorySignatures = keyof PollFactoryTypes['methods']\n/**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\nexport type PollFactoryNonVoidMethodSignatures = keyof PollFactoryTypes['methods'] extends infer T ? T extends keyof PollFactoryTypes['methods'] ? MethodReturn<T> extends void ? never : T : never : never\n/**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\nexport type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n>\n/**\n * Maps a method signature from the PollFactory smart contract to the method's arguments in either tuple or struct form\n */\nexport type MethodArgs<TSignature extends PollFactorySignatures> = PollFactoryTypes['methods'][TSignature]['argsObj' | 'argsTuple']\n/**\n * Maps a method signature from the PollFactory smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends PollFactorySignatures> = PollFactoryTypes['methods'][TSignature]['returns']\n\n/**\n * Defines the shape of the keyed global state of the application.\n */\nexport type GlobalKeysState = PollFactoryTypes['state']['global']['keys']\n\n/**\n * Defines the shape of the keyed box state of the application.\n */\nexport type BoxKeysState = PollFactoryTypes['state']['box']['keys']\n\n\n/**\n * Defines supported create method params for this smart contract\n */\nexport type PollFactoryCreateCallParams =\n | Expand<CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & {method: 'create'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n | Expand<CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & {method: 'create(string,string,uint64,uint64)void'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n/**\n * Defines supported update method params for this smart contract\n */\nexport type PollFactoryUpdateCallParams =\n | Expand<CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & {method: 'update'}>\n | Expand<CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & {method: 'update(string)void'}>\n/**\n * Defines arguments required for the deploy method.\n */\nexport type PollFactoryDeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {\n /**\n * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n createParams?: PollFactoryCreateCallParams\n /**\n * Update transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n updateParams?: PollFactoryUpdateCallParams\n}>\n\n\n/**\n * Exposes methods for constructing `AppClient` params objects for ABI calls to the PollFactory smart contract\n */\nexport abstract class PollFactoryParamsFactory {\n /**\n * Gets available create ABI call param factories\n */\n static get create() {\n return {\n _resolveByMethod<TParams extends PollFactoryCreateCallParams & {method: string}>(params: TParams) {\n switch(params.method) {\n case 'create':\n case 'create(string,string,uint64,uint64)void':\n return PollFactoryParamsFactory.create.create(params)\n }\n throw new Error(`Unknown ' + verb + ' method`)\n },\n\n /**\n * Constructs create ABI call params for the PollFactory smart contract using the create(string,string,uint64,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n create(params: CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC}): AppClientMethodCallParams & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC} {\n return {\n ...params,\n method: 'create(string,string,uint64,uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.version, params.args.childVersion, params.args.akitaDao, params.args.akitaDaoEscrow],\n }\n },\n }\n }\n\n /**\n * Gets available update ABI call param factories\n */\n static get update() {\n return {\n _resolveByMethod<TParams extends PollFactoryUpdateCallParams & {method: string}>(params: TParams) {\n switch(params.method) {\n case 'update':\n case 'update(string)void':\n return PollFactoryParamsFactory.update.update(params)\n }\n throw new Error(`Unknown ' + verb + ' method`)\n },\n\n /**\n * Constructs update ABI call params for the PollFactory smart contract using the update(string)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n update(params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams): AppClientMethodCallParams & AppClientCompilationParams {\n return {\n ...params,\n method: 'update(string)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.newVersion],\n }\n },\n }\n }\n\n /**\n * Constructs a no op call for the new(pay,uint8,uint64,uint64,string,string[],uint64)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static new(params: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'new(pay,uint8,uint64,uint64,string,string[],uint64)uint64' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.payment, params.args.type, params.args.endTime, params.args.maxSelected, params.args.question, params.args.options, params.args.gateId],\n }\n }\n /**\n * Constructs a no op call for the newPollCost()uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static newPollCost(params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'newPollCost()uint64' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n /**\n * Constructs a no op call for the initBoxedContract(string,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static initBoxedContract(params: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'initBoxedContract(string,uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.version, params.args.size],\n }\n }\n /**\n * Constructs a no op call for the loadBoxedContract(uint64,byte[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static loadBoxedContract(params: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'loadBoxedContract(uint64,byte[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.offset, params.args.data],\n }\n }\n /**\n * Constructs a no op call for the deleteBoxedContract()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static deleteBoxedContract(params: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'deleteBoxedContract()void' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n /**\n * Constructs a no op call for the optIn(pay,uint64)void ABI method\n *\n * optin tells the contract to opt into an asa\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static optIn(params: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'optIn(pay,uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.payment, params.args.asset],\n }\n }\n /**\n * Constructs a no op call for the optInCost(uint64)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static optInCost(params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'optInCost(uint64)uint64' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.asset],\n }\n }\n /**\n * Constructs a no op call for the updateAkitaDAOEscrow(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static updateAkitaDaoEscrow(params: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'updateAkitaDAOEscrow(uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.app],\n }\n }\n /**\n * Constructs a no op call for the updateAkitaDAO(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static updateAkitaDao(params: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'updateAkitaDAO(uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.akitaDao],\n }\n }\n /**\n * Constructs a no op call for the opUp()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static opUp(params: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'opUp()void' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n}\n\n/**\n * A factory to create and deploy one or more instance of the PollFactory smart contract and to create one or more app clients to interact with those (or other) app instances\n */\nexport class PollFactoryFactory {\n /**\n * The underlying `AppFactory` for when you want to have more flexibility\n */\n public readonly appFactory: _AppFactory\n\n /**\n * Creates a new instance of `PollFactoryFactory`\n *\n * @param params The parameters to initialise the app factory with\n */\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n })\n }\n \n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName\n }\n \n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC\n }\n \n /** A reference to the underlying `AlgorandClient` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand\n }\n \n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new PollFactoryClient(this.appFactory.getAppClientById(params))\n }\n \n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public async getAppClientByCreatorAndName(\n params: AppFactoryResolveAppClientByCreatorAndNameParams,\n ) {\n return new PollFactoryClient(await this.appFactory.getAppClientByCreatorAndName(params))\n }\n\n /**\n * Idempotently deploys the PollFactory smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public async deploy(params: PollFactoryDeployParams = {}) {\n const result = await this.appFactory.deploy({\n ...params,\n createParams: params.createParams?.method ? PollFactoryParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (PollFactoryCreateCallParams & { args: Uint8Array[] }) : undefined,\n updateParams: params.updateParams?.method ? PollFactoryParamsFactory.update._resolveByMethod(params.updateParams) : params.updateParams ? params.updateParams as (PollFactoryUpdateCallParams & { args: Uint8Array[] }) : undefined,\n })\n return { result: result.result, appClient: new PollFactoryClient(result.appClient) }\n }\n\n /**\n * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the PollFactory smart contract using the create(string,string,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create params\n */\n create: (params: CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.params.create(PollFactoryParamsFactory.create.create(params))\n },\n },\n\n /**\n * Gets available deployUpdate methods\n */\n deployUpdate: {\n /**\n * Updates an existing instance of the PollFactory smart contract using the update(string)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The deployUpdate params\n */\n update: (params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams) => {\n return this.appFactory.params.deployUpdate(PollFactoryParamsFactory.update.update(params))\n },\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the PollFactory smart contract using the create(string,string,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create transaction\n */\n create: (params: CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.createTransaction.create(PollFactoryParamsFactory.create.create(params))\n },\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the PollFactory smart contract using an ABI method call using the create(string,string,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create result\n */\n create: async (params: CallParams<PollFactoryArgs['obj']['create(string,string,uint64,uint64)void'] | PollFactoryArgs['tuple']['create(string,string,uint64,uint64)void']> & AppClientCompilationParams & CreateSchema & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appFactory.send.create(PollFactoryParamsFactory.create.create(params))\n return { result: { ...result.result, return: result.result.return as unknown as (undefined | PollFactoryReturns['create(string,string,uint64,uint64)void']) }, appClient: new PollFactoryClient(result.appClient) }\n },\n },\n\n }\n\n}\n/**\n * A client to make calls to the PollFactory smart contract\n */\nexport class PollFactoryClient {\n /**\n * The underlying `AppClient` for when you want to have more flexibility\n */\n public readonly appClient: _AppClient\n\n /**\n * Creates a new instance of `PollFactoryClient`\n *\n * @param appClient An `AppClient` instance which has been created with the PollFactory app spec\n */\n constructor(appClient: _AppClient)\n /**\n * Creates a new instance of `PollFactoryClient`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends PollFactoryNonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {\n return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined\n }\n\n /**\n * Returns a new `PollFactoryClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<PollFactoryClient> {\n return new PollFactoryClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n \n /**\n * Returns an `PollFactoryClient` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<PollFactoryClient> {\n return new PollFactoryClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n \n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n \n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n \n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n \n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n \n /** A reference to the underlying `AlgorandClient` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand\n }\n\n /**\n * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available update methods\n */\n update: {\n /**\n * Updates an existing instance of the PollFactory smart contract using the `update(string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The update params\n */\n update: (params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams) => {\n return this.appClient.params.update(PollFactoryParamsFactory.update.update(params))\n },\n\n },\n\n /**\n * Makes a clear_state call to an existing instance of the PollFactory smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.params.bare.clearState(params)\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `new(pay,uint8,uint64,uint64,string,string[],uint64)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n new: (params: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.new(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `newPollCost()uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n newPollCost: (params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.newPollCost(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `initBoxedContract(string,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n initBoxedContract: (params: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.initBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `loadBoxedContract(uint64,byte[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n loadBoxedContract: (params: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.loadBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `deleteBoxedContract()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n deleteBoxedContract: (params: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.deleteBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n optIn: (params: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.optIn(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optInCost(uint64)uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n optInCost: (params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.optInCost(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAOEscrow(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n updateAkitaDaoEscrow: (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.updateAkitaDaoEscrow(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n updateAkitaDao: (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n opUp: (params: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(PollFactoryParamsFactory.opUp(params))\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available update methods\n */\n update: {\n /**\n * Updates an existing instance of the PollFactory smart contract using the `update(string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The update transaction\n */\n update: (params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams) => {\n return this.appClient.createTransaction.update(PollFactoryParamsFactory.update.update(params))\n },\n\n },\n\n /**\n * Makes a clear_state call to an existing instance of the PollFactory smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.createTransaction.bare.clearState(params)\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `new(pay,uint8,uint64,uint64,string,string[],uint64)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n new: (params: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.new(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `newPollCost()uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n newPollCost: (params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.newPollCost(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `initBoxedContract(string,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n initBoxedContract: (params: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.initBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `loadBoxedContract(uint64,byte[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n loadBoxedContract: (params: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.loadBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `deleteBoxedContract()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n deleteBoxedContract: (params: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.deleteBoxedContract(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n optIn: (params: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.optIn(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optInCost(uint64)uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n optInCost: (params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.optInCost(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAOEscrow(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n updateAkitaDaoEscrow: (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.updateAkitaDaoEscrow(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n updateAkitaDao: (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n opUp: (params: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(PollFactoryParamsFactory.opUp(params))\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available update methods\n */\n update: {\n /**\n * Updates an existing instance of the PollFactory smart contract using the `update(string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The update result\n */\n update: async (params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams & SendParams) => {\n const result = await this.appClient.send.update(PollFactoryParamsFactory.update.update(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['update(string)void'])}\n },\n\n },\n\n /**\n * Makes a clear_state call to an existing instance of the PollFactory smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams & SendParams>) => {\n return this.appClient.send.bare.clearState(params)\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `new(pay,uint8,uint64,uint64,string,string[],uint64)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n new: async (params: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.new(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `newPollCost()uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n newPollCost: async (params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.newPollCost(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['newPollCost()uint64'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `initBoxedContract(string,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n initBoxedContract: async (params: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.initBoxedContract(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['initBoxedContract(string,uint64)void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `loadBoxedContract(uint64,byte[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n loadBoxedContract: async (params: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.loadBoxedContract(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['loadBoxedContract(uint64,byte[])void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `deleteBoxedContract()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n deleteBoxedContract: async (params: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.deleteBoxedContract(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['deleteBoxedContract()void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n optIn: async (params: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.optIn(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['optIn(pay,uint64)void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `optInCost(uint64)uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n optInCost: async (params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.optInCost(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['optInCost(uint64)uint64'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAOEscrow(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n updateAkitaDaoEscrow: async (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.updateAkitaDaoEscrow(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['updateAkitaDAOEscrow(uint64)void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n updateAkitaDao: async (params: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.updateAkitaDao(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['updateAkitaDAO(uint64)void'])}\n },\n\n /**\n * Makes a call to the PollFactory smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n opUp: async (params: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.opUp(params))\n return {...result, return: result.return as unknown as (undefined | PollFactoryReturns['opUp()void'])}\n },\n\n }\n\n /**\n * Clone this app client with different params\n *\n * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.\n * @returns A new app client with the altered params\n */\n public clone(params: CloneAppClientParams) {\n return new PollFactoryClient(this.appClient.clone(params))\n }\n\n /**\n * Makes a readonly (simulated) call to the PollFactory smart contract using the `newPollCost()uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async newPollCost(params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> = {args: []}) {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.newPollCost(params))\n return result.return as unknown as PollFactoryReturns['newPollCost()uint64']\n }\n\n /**\n * Makes a readonly (simulated) call to the PollFactory smart contract using the `optInCost(uint64)uint64` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async optInCost(params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']>) {\n const result = await this.appClient.send.call(PollFactoryParamsFactory.optInCost(params))\n return result.return as unknown as PollFactoryReturns['optInCost(uint64)uint64']\n }\n\n /**\n * Methods to access state for the current PollFactory app\n */\n state = {\n /**\n * Methods to access global state for the current PollFactory app\n */\n global: {\n /**\n * Get all current keyed values from global state\n */\n getAll: async (): Promise<Partial<Expand<GlobalKeysState>>> => {\n const result = await this.appClient.state.global.getAll()\n return {\n childContractVersion: result.childContractVersion,\n akitaDaoEscrow: result.akitaDAOEscrow,\n version: result.version,\n akitaDao: result.akitaDAO,\n }\n },\n /**\n * Get the current value of the childContractVersion key in global state\n */\n childContractVersion: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"childContractVersion\")) as string | undefined },\n /**\n * Get the current value of the akitaDAOEscrow key in global state\n */\n akitaDaoEscrow: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"akitaDAOEscrow\")) as bigint | undefined },\n /**\n * Get the current value of the version key in global state\n */\n version: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"version\")) as string | undefined },\n /**\n * Get the current value of the akitaDAO key in global state\n */\n akitaDao: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"akitaDAO\")) as bigint | undefined },\n },\n /**\n * Methods to access box state for the current PollFactory app\n */\n box: {\n /**\n * Get all current keyed values from box state\n */\n getAll: async (): Promise<Partial<Expand<BoxKeysState>>> => {\n const result = await this.appClient.state.box.getAll()\n return {\n boxedContract: new BinaryStateValue(result.boxedContract),\n }\n },\n /**\n * Get the current value of the boxedContract key in box state\n */\n boxedContract: async (): Promise<BinaryState> => { return new BinaryStateValue((await this.appClient.state.box.getValue(\"boxedContract\")) as Uint8Array | undefined) },\n },\n }\n\n public newGroup(): PollFactoryComposer {\n const client = this\n const composer = this.algorand.newGroup()\n let promiseChain:Promise<unknown> = Promise.resolve()\n const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []\n return {\n /**\n * Add a new(pay,uint8,uint64,uint64,string,string[],uint64)uint64 method call against the PollFactory contract\n */\n new(params: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.new(params)))\n resultMappers.push((v) => client.decodeReturnValue('new(pay,uint8,uint64,uint64,string,string[],uint64)uint64', v))\n return this\n },\n /**\n * Add a newPollCost()uint64 method call against the PollFactory contract\n */\n newPollCost(params: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.newPollCost(params)))\n resultMappers.push((v) => client.decodeReturnValue('newPollCost()uint64', v))\n return this\n },\n /**\n * Add a initBoxedContract(string,uint64)void method call against the PollFactory contract\n */\n initBoxedContract(params: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.initBoxedContract(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a loadBoxedContract(uint64,byte[])void method call against the PollFactory contract\n */\n loadBoxedContract(params: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.loadBoxedContract(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a deleteBoxedContract()void method call against the PollFactory contract\n */\n deleteBoxedContract(params: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.deleteBoxedContract(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a optIn(pay,uint64)void method call against the PollFactory contract\n */\n optIn(params: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optIn(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a optInCost(uint64)uint64 method call against the PollFactory contract\n */\n optInCost(params: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optInCost(params)))\n resultMappers.push((v) => client.decodeReturnValue('optInCost(uint64)uint64', v))\n return this\n },\n /**\n * Add a updateAkitaDAOEscrow(uint64)void method call against the PollFactory contract\n */\n updateAkitaDaoEscrow(params: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.updateAkitaDaoEscrow(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a updateAkitaDAO(uint64)void method call against the PollFactory contract\n */\n updateAkitaDao(params: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.updateAkitaDao(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a opUp()void method call against the PollFactory contract\n */\n opUp(params: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.opUp(params)))\n resultMappers.push(undefined)\n return this\n },\n get update() {\n return {\n update: (params: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']> & AppClientCompilationParams) => {\n promiseChain = promiseChain.then(async () => composer.addAppUpdateMethodCall(await client.params.update.update(params)))\n resultMappers.push(undefined)\n return this\n },\n }\n },\n /**\n * Add a clear state call to the PollFactory contract\n */\n clearState(params: AppClientBareCallParams) {\n promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)))\n return this\n },\n addTransaction(txn: Transaction, signer?: TransactionSigner) {\n promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer))\n return this\n },\n async composer() {\n await promiseChain\n return composer\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain\n const result = await (!options ? composer.simulate() : composer.simulate(options))\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n },\n async send(params?: SendParams) {\n await promiseChain\n const result = await composer.send(params)\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n }\n } as unknown as PollFactoryComposer\n }\n}\nexport type PollFactoryComposer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the new(pay,uint8,uint64,uint64,string,string[],uint64)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n new(params?: CallParams<PollFactoryArgs['obj']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | PollFactoryArgs['tuple']['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['new(pay,uint8,uint64,uint64,string,string[],uint64)uint64'] | undefined]>\n\n /**\n * Calls the newPollCost()uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n newPollCost(params?: CallParams<PollFactoryArgs['obj']['newPollCost()uint64'] | PollFactoryArgs['tuple']['newPollCost()uint64']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['newPollCost()uint64'] | undefined]>\n\n /**\n * Calls the initBoxedContract(string,uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n initBoxedContract(params?: CallParams<PollFactoryArgs['obj']['initBoxedContract(string,uint64)void'] | PollFactoryArgs['tuple']['initBoxedContract(string,uint64)void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['initBoxedContract(string,uint64)void'] | undefined]>\n\n /**\n * Calls the loadBoxedContract(uint64,byte[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n loadBoxedContract(params?: CallParams<PollFactoryArgs['obj']['loadBoxedContract(uint64,byte[])void'] | PollFactoryArgs['tuple']['loadBoxedContract(uint64,byte[])void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['loadBoxedContract(uint64,byte[])void'] | undefined]>\n\n /**\n * Calls the deleteBoxedContract()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n deleteBoxedContract(params?: CallParams<PollFactoryArgs['obj']['deleteBoxedContract()void'] | PollFactoryArgs['tuple']['deleteBoxedContract()void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['deleteBoxedContract()void'] | undefined]>\n\n /**\n * Calls the optIn(pay,uint64)void ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n optIn(params?: CallParams<PollFactoryArgs['obj']['optIn(pay,uint64)void'] | PollFactoryArgs['tuple']['optIn(pay,uint64)void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['optIn(pay,uint64)void'] | undefined]>\n\n /**\n * Calls the optInCost(uint64)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n optInCost(params?: CallParams<PollFactoryArgs['obj']['optInCost(uint64)uint64'] | PollFactoryArgs['tuple']['optInCost(uint64)uint64']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['optInCost(uint64)uint64'] | undefined]>\n\n /**\n * Calls the updateAkitaDAOEscrow(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n updateAkitaDaoEscrow(params?: CallParams<PollFactoryArgs['obj']['updateAkitaDAOEscrow(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAOEscrow(uint64)void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['updateAkitaDAOEscrow(uint64)void'] | undefined]>\n\n /**\n * Calls the updateAkitaDAO(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n updateAkitaDao(params?: CallParams<PollFactoryArgs['obj']['updateAkitaDAO(uint64)void'] | PollFactoryArgs['tuple']['updateAkitaDAO(uint64)void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['updateAkitaDAO(uint64)void'] | undefined]>\n\n /**\n * Calls the opUp()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n opUp(params?: CallParams<PollFactoryArgs['obj']['opUp()void'] | PollFactoryArgs['tuple']['opUp()void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['opUp()void'] | undefined]>\n\n /**\n * Gets available update methods\n */\n readonly update: {\n /**\n * Updates an existing instance of the PollFactory smart contract using the update(string)void ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n update(params?: CallParams<PollFactoryArgs['obj']['update(string)void'] | PollFactoryArgs['tuple']['update(string)void']>): PollFactoryComposer<[...TReturns, PollFactoryReturns['update(string)void'] | undefined]>\n }\n\n /**\n * Makes a clear_state call to an existing instance of the PollFactory smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(params?: AppClientBareCallParams): PollFactoryComposer<[...TReturns, undefined]>\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn A transaction to add to the transaction group\n * @param signer The optional signer to use when signing this transaction.\n */\n addTransaction(txn: Transaction, signer?: TransactionSigner): PollFactoryComposer<TReturns>\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n composer(): Promise<TransactionComposer>\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(): Promise<PollFactoryComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: SkipSignaturesSimulateOptions): Promise<PollFactoryComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: RawSimulateOptions): Promise<PollFactoryComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n /**\n * Sends the transaction group to the network and returns the results\n */\n send(params?: SendParams): Promise<PollFactoryComposerResults<TReturns>>\n}\nexport type PollFactoryComposerResults<TReturns extends [...any[]]> = Expand<SendAtomicTransactionComposerResults & {\n returns: TReturns\n}>\n\n"]}