From 30249541563c874b6c6e6753f78cbcf3ad95b0e4 Mon Sep 17 00:00:00 2001 From: julesGoullee Date: Sun, 7 Nov 2021 19:46:48 +0100 Subject: [PATCH] getMintPriceForDrop --- .../contracts/contracts/CyberDropBase.sol | 8 +- .../test/CyberDestinationFactories.ts | 322 +++++++++++++++++- .../CyberDestinationFactoryFacet.ts | 19 +- .../CyberDestinationUtilityFactoryFacet.ts | 19 +- .../typechain-types/CyberDropBase.ts | 19 +- .../CyberDestinationFactoryFacet__factory.ts | 4 +- ...DestinationUtilityFactoryFacet__factory.ts | 4 +- .../factories/CyberDropBase__factory.ts | 4 +- 8 files changed, 363 insertions(+), 36 deletions(-) diff --git a/packages/contracts/contracts/CyberDropBase.sol b/packages/contracts/contracts/CyberDropBase.sol index 006fbdf..6058caf 100644 --- a/packages/contracts/contracts/CyberDropBase.sol +++ b/packages/contracts/contracts/CyberDropBase.sol @@ -97,7 +97,7 @@ contract CyberDropBase is CyberDestinationFactoryBase { require(drop.minted < drop.amountCap, 'CR'); } - uint256 price = getMintPrice(drop); + uint256 price = getMintPriceForDrop(drop); require(msg.value >= price, 'IA'); _safeMint(sender, _tokenId, 1, ''); @@ -126,10 +126,10 @@ contract CyberDropBase is CyberDestinationFactoryBase { if (drop.amountCap != 0) { require(drop.minted < drop.amountCap, 'CR'); } - return getMintPrice(drop); + return getMintPriceForDrop(drop); } - function getMintPrice(LibDropStorage.Drop memory drop) + function getMintPriceForDrop(LibDropStorage.Drop memory drop) public view returns (uint256) @@ -153,7 +153,7 @@ contract CyberDropBase is CyberDestinationFactoryBase { uint256 _priceEnd, uint256 _stepDuration ) public pure returns (uint256) { - // https://www.desmos.com/calculator/ipv4mm7hrh + // https://www.desmos.com/calculator/oajpdvew5q // f\left(x\right)=\frac{s\ \cdot d\ +\ \operatorname{mod}\left(x,\ g\right)\ \cdot\ \left(s\ -\ l\right)\ -\ x\ \cdot\ \left(s\ -\ l\right)\ \ }{d} // (s * d + (x % g) * (s - l) - x * (s - l) / d return diff --git a/packages/contracts/test/CyberDestinationFactories.ts b/packages/contracts/test/CyberDestinationFactories.ts index 7988d30..ec8c1ae 100644 --- a/packages/contracts/test/CyberDestinationFactories.ts +++ b/packages/contracts/test/CyberDestinationFactories.ts @@ -7,7 +7,7 @@ const memory: any = {} const tokenURI = (uri: string) => `ipfs://${uri}` -describe.only('CyberDestinationFactories', function () { +describe('CyberDestinationFactories', function () { before(async () => { memory.signers = await ethers.getSigners() }) @@ -808,6 +808,324 @@ describe.only('CyberDestinationFactories', function () { }) }) + describe('getMintPriceForDrop', () => { + it('Should get mint price for drop', async () => { + const now = Date.now() + await ethers.provider.send('evm_setNextBlockTimestamp', [now]) + await ethers.provider.send('evm_mine', []) + expect( + await memory.contract.getMintPriceForDrop({ + timeStart: now, + timeEnd: now + 1800, + priceStart: 50, + priceEnd: 5, + stepDuration: 300, + amountCap: 1, + shareCyber: 50, + creator: memory.other.address, + minted: 0, + }) + ).to.be.eq('50') + await ethers.provider.send('evm_increaseTime', [600]) + await ethers.provider.send('evm_mine', []) + expect( + await memory.contract.getMintPriceForDrop({ + timeStart: now, + timeEnd: now + 1800, + priceStart: 50, + priceEnd: 5, + stepDuration: 300, + amountCap: 1, + shareCyber: 50, + creator: memory.other.address, + minted: 0, + }) + ).to.be.eq('35') + await ethers.provider.send('evm_increaseTime', [1200]) + await ethers.provider.send('evm_mine', []) + expect( + await memory.contract.getMintPriceForDrop({ + timeStart: now, + timeEnd: now + 1800, + priceStart: 50, + priceEnd: 5, + stepDuration: 300, + amountCap: 1, + shareCyber: 50, + creator: memory.other.address, + minted: 0, + }) + ).to.be.eq('5') + }) + }) + + describe('GetMintPriceForToken', () => { + it('Should get mint price for token', async () => { + const uri = 'Qmsfzefi221ifjzifj' + const timeStart = parseInt((Date.now() / 1000 - 100).toString()) + const timeEnd = parseInt((Date.now() / 1000 + 100).toString()) + const priceStart = 100 + const priceEnd = 10 + const stepDuration = 20 + const amountCap = 10 + const shareCyber = 50 + const nonce = 0 + const signature = await signCreateDropRequest( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + memory.other.address, + nonce, + memory.manager + ) + await memory.contract + .connect(memory.other) + .createDrop( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + signature + ) + const tokenId = 0 + const mintPrice = await memory.contract.getMintPriceForToken(tokenId) + expect(mintPrice).to.be.eq('55') + }) + + it('Should get mint price for token throw out of time before', async () => { + const uri = 'Qmsfzefi221ifjzifj' + const timeStart = parseInt((Date.now() / 1000 + 100).toString()) + const timeEnd = parseInt((Date.now() / 1000 + 500).toString()) + const priceStart = 100 + const priceEnd = 10 + const stepDuration = 20 + const amountCap = 10 + const shareCyber = 50 + const nonce = 0 + const signature = await signCreateDropRequest( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + memory.other.address, + nonce, + memory.manager + ) + await memory.contract + .connect(memory.other) + .createDrop( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + signature + ) + const tokenId = 0 + await expect( + memory.contract.getMintPriceForToken(tokenId) + ).to.be.revertedWith('OOT') + }) + + it('Should get mint price for token throw out of time after', async () => { + const uri = 'Qmsfzefi221ifjzifj' + const timeStart = parseInt((Date.now() / 1000 - 500).toString()) + const timeEnd = parseInt((Date.now() / 1000 - 100).toString()) + const priceStart = 100 + const priceEnd = 10 + const stepDuration = 20 + const amountCap = 10 + const shareCyber = 50 + const nonce = 0 + const signature = await signCreateDropRequest( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + memory.other.address, + nonce, + memory.manager + ) + await memory.contract + .connect(memory.other) + .createDrop( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + signature + ) + const tokenId = 0 + await expect( + memory.contract.getMintPriceForToken(tokenId) + ).to.be.revertedWith('OOT') + }) + + it('Should get mint price for token without cap', async () => { + const uri = 'Qmsfzefi221ifjzifj' + const timeStart = parseInt((Date.now() / 1000 - 100).toString()) + const timeEnd = parseInt((Date.now() / 1000 + 100).toString()) + const priceStart = 100 + const priceEnd = 10 + const stepDuration = 20 + const amountCap = 0 + const shareCyber = 50 + const nonce = 0 + const signature = await signCreateDropRequest( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + memory.other.address, + nonce, + memory.manager + ) + await memory.contract + .connect(memory.other) + .createDrop( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + signature + ) + const tokenId = 0 + const mintPrice = await memory.contract.getMintPriceForToken(tokenId) + expect(mintPrice).to.be.eq('55') + }) + + it('Should get mint price for token throw when cap reach', async () => { + const uri = 'Qmsfzefi221ifjzifj' + const timeStart = parseInt((Date.now() / 1000 - 100).toString()) + const timeEnd = parseInt((Date.now() / 1000 + 100).toString()) + const priceStart = 100 + const priceEnd = 10 + const stepDuration = 20 + const amountCap = 1 + const shareCyber = 50 + const nonce = 0 + const signature = await signCreateDropRequest( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + memory.other.address, + nonce, + memory.manager + ) + await memory.contract + .connect(memory.other) + .createDrop( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + signature + ) + const tokenId = 0 + const mintPrice = await memory.contract.getMintPriceForToken(tokenId) + expect(mintPrice).to.be.eq('55') + await memory.contract.connect(memory.other2).mint(tokenId, { + value: mintPrice, + }) + await expect( + memory.contract.getMintPriceForToken(tokenId) + ).to.be.revertedWith('CR') + }) + + it('Should get mint price for with time spent', async () => { + const now = Date.now() + const uri = 'Qmsfzefi221ifjzifj' + const timeStart = parseInt((now / 1000).toString()) + const timeEnd = parseInt((now / 1000 + 1800).toString()) + const priceStart = 50 + const priceEnd = 5 + const stepDuration = 300 + const amountCap = 10 + const shareCyber = 50 + const nonce = 0 + const signature = await signCreateDropRequest( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + memory.other.address, + nonce, + memory.manager + ) + await memory.contract + .connect(memory.other) + .createDrop( + uri, + timeStart, + timeEnd, + priceStart, + priceEnd, + stepDuration, + amountCap, + shareCyber, + signature + ) + const tokenId = 0 + await ethers.provider.send('evm_increaseTime', [100]) + await ethers.provider.send('evm_mine', []) + expect(await memory.contract.getMintPriceForToken(tokenId)).to.be.eq('50') + await ethers.provider.send('evm_increaseTime', [300]) + await ethers.provider.send('evm_mine', []) + expect(await memory.contract.getMintPriceForToken(tokenId)).to.be.eq('42') + await ethers.provider.send('evm_increaseTime', [600]) + await ethers.provider.send('evm_mine', []) + expect(await memory.contract.getMintPriceForToken(tokenId)).to.be.eq('27') + await ethers.provider.send('evm_increaseTime', [700]) + await ethers.provider.send('evm_mine', []) + expect(await memory.contract.getMintPriceForToken(tokenId)).to.be.eq('12') + }) + }) + describe('Mint', () => { it('Should mint ', async () => { const uri = 'Qmsfzefi221ifjzifj' @@ -1198,7 +1516,7 @@ describe.only('CyberDestinationFactories', function () { expect(drop.minted).to.eq('2') }) - it('MintEdition throw cap reach', async () => { + it('Should mint throw cap reach', async () => { const uri = 'Qmsfzefi221ifjzifj' const timeStart = parseInt((Date.now() / 1000 - 100).toString()) const timeEnd = parseInt((Date.now() / 1000 + 10).toString()) diff --git a/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts b/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts index 337daf1..6d47e1c 100644 --- a/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts +++ b/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts @@ -67,7 +67,7 @@ export interface CyberDestinationFactoryFacetInterface 'balanceOfBatch(address[],uint256[])': FunctionFragment 'createDrop(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)': FunctionFragment 'getDrop(uint256)': FunctionFragment - 'getMintPrice((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256))': FunctionFragment + 'getMintPriceForDrop((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256))': FunctionFragment 'getMintPriceForToken(uint256)': FunctionFragment 'getPriceFor(uint256,uint256,uint256,uint256,uint256)': FunctionFragment 'initialize(string,address,address,address,address)': FunctionFragment @@ -118,7 +118,7 @@ export interface CyberDestinationFactoryFacetInterface values: [BigNumberish] ): string encodeFunctionData( - functionFragment: 'getMintPrice', + functionFragment: 'getMintPriceForDrop', values: [DropStruct] ): string encodeFunctionData( @@ -193,7 +193,7 @@ export interface CyberDestinationFactoryFacetInterface decodeFunctionResult(functionFragment: 'createDrop', data: BytesLike): Result decodeFunctionResult(functionFragment: 'getDrop', data: BytesLike): Result decodeFunctionResult( - functionFragment: 'getMintPrice', + functionFragment: 'getMintPriceForDrop', data: BytesLike ): Result decodeFunctionResult( @@ -375,7 +375,7 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise<[DropStructOutput]> - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise<[BigNumber]> @@ -512,7 +512,10 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice(drop: DropStruct, overrides?: CallOverrides): Promise + getMintPriceForDrop( + drop: DropStruct, + overrides?: CallOverrides + ): Promise getMintPriceForToken( _tokenId: BigNumberish, @@ -640,7 +643,7 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise @@ -841,7 +844,7 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise @@ -976,7 +979,7 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise diff --git a/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts b/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts index ff9410d..ac250b7 100644 --- a/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts +++ b/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts @@ -67,7 +67,7 @@ export interface CyberDestinationUtilityFactoryFacetInterface 'balanceOfBatch(address[],uint256[])': FunctionFragment 'createDrop(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)': FunctionFragment 'getDrop(uint256)': FunctionFragment - 'getMintPrice((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256))': FunctionFragment + 'getMintPriceForDrop((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256))': FunctionFragment 'getMintPriceForToken(uint256)': FunctionFragment 'getPriceFor(uint256,uint256,uint256,uint256,uint256)': FunctionFragment 'initialize(string,address,address,address,address)': FunctionFragment @@ -118,7 +118,7 @@ export interface CyberDestinationUtilityFactoryFacetInterface values: [BigNumberish] ): string encodeFunctionData( - functionFragment: 'getMintPrice', + functionFragment: 'getMintPriceForDrop', values: [DropStruct] ): string encodeFunctionData( @@ -193,7 +193,7 @@ export interface CyberDestinationUtilityFactoryFacetInterface decodeFunctionResult(functionFragment: 'createDrop', data: BytesLike): Result decodeFunctionResult(functionFragment: 'getDrop', data: BytesLike): Result decodeFunctionResult( - functionFragment: 'getMintPrice', + functionFragment: 'getMintPriceForDrop', data: BytesLike ): Result decodeFunctionResult( @@ -375,7 +375,7 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise<[DropStructOutput]> - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise<[BigNumber]> @@ -512,7 +512,10 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice(drop: DropStruct, overrides?: CallOverrides): Promise + getMintPriceForDrop( + drop: DropStruct, + overrides?: CallOverrides + ): Promise getMintPriceForToken( _tokenId: BigNumberish, @@ -640,7 +643,7 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise @@ -841,7 +844,7 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise @@ -976,7 +979,7 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise diff --git a/packages/contracts/typechain-types/CyberDropBase.ts b/packages/contracts/typechain-types/CyberDropBase.ts index 93b5df9..bf0375c 100644 --- a/packages/contracts/typechain-types/CyberDropBase.ts +++ b/packages/contracts/typechain-types/CyberDropBase.ts @@ -66,7 +66,7 @@ export interface CyberDropBaseInterface extends ethers.utils.Interface { 'balanceOfBatch(address[],uint256[])': FunctionFragment 'createDrop(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)': FunctionFragment 'getDrop(uint256)': FunctionFragment - 'getMintPrice((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256))': FunctionFragment + 'getMintPriceForDrop((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256))': FunctionFragment 'getMintPriceForToken(uint256)': FunctionFragment 'getPriceFor(uint256,uint256,uint256,uint256,uint256)': FunctionFragment 'initialize(string,address,address,address,address)': FunctionFragment @@ -117,7 +117,7 @@ export interface CyberDropBaseInterface extends ethers.utils.Interface { values: [BigNumberish] ): string encodeFunctionData( - functionFragment: 'getMintPrice', + functionFragment: 'getMintPriceForDrop', values: [DropStruct] ): string encodeFunctionData( @@ -192,7 +192,7 @@ export interface CyberDropBaseInterface extends ethers.utils.Interface { decodeFunctionResult(functionFragment: 'createDrop', data: BytesLike): Result decodeFunctionResult(functionFragment: 'getDrop', data: BytesLike): Result decodeFunctionResult( - functionFragment: 'getMintPrice', + functionFragment: 'getMintPriceForDrop', data: BytesLike ): Result decodeFunctionResult( @@ -374,7 +374,7 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise<[DropStructOutput]> - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise<[BigNumber]> @@ -511,7 +511,10 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice(drop: DropStruct, overrides?: CallOverrides): Promise + getMintPriceForDrop( + drop: DropStruct, + overrides?: CallOverrides + ): Promise getMintPriceForToken( _tokenId: BigNumberish, @@ -639,7 +642,7 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise @@ -840,7 +843,7 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise @@ -975,7 +978,7 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise - getMintPrice( + getMintPriceForDrop( drop: DropStruct, overrides?: CallOverrides ): Promise diff --git a/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts b/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts index 77e555b..373dfe3 100644 --- a/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts @@ -419,7 +419,7 @@ const _abi = [ type: 'tuple', }, ], - name: 'getMintPrice', + name: 'getMintPriceForDrop', outputs: [ { internalType: 'uint256', @@ -823,7 +823,7 @@ const _abi = [ ] const _bytecode = - '0x608060405234801561001057600080fd5b50615d6980620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063ab12881a1161006f578063ab12881a1461052c578063bc01188e14610569578063bd85b03914610594578063d61b0c82146105d1578063e985e9c51461060e578063f242432a1461064b5761014a565b80635c5ed16d146103df5780636787d4491461041c5780636dcfd8411461045957806385bff2e714610496578063a0712d68146104d3578063a22cb465146105035761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b50610176600480360381019061017191906138f2565b610674565b6040516101839190613941565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae91906139b4565b610688565b6040516101c091906139fc565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613bfe565b6106ab565b6040516101fd9190613941565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613d00565b610abb565b005b34801561023b57600080fd5b5061025660048036038101906102519190613d97565b610d1f565b6040516102639190613e4c565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613d97565b610e43565b6040516102a09190613941565b60405180910390f35b3480156102b557600080fd5b506102be610e70565b6040516102cb9190613941565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613e6e565b610e8a565b6040516103089190613941565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613f63565b610ee3565b005b34801561034657600080fd5b5061034f610f77565b60405161035c9190614041565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061411f565b610faa565b6040516103999190614255565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613e6e565b61119f565b6040516103d691906139fc565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613d97565b611202565b6040516104139190613941565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613d97565b611393565b604051610450919061434f565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613d97565b6114be565b60405161048d9190614429565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613e6e565b6115c6565b6040516104ca9190614255565b60405180910390f35b6104ed60048036038101906104e89190613d97565b6116cc565b6040516104fa91906139fc565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190614477565b611a41565b005b34801561053857600080fd5b50610553600480360381019061054e91906145c8565b611bb6565b6040516105609190613941565b60405180910390f35b34801561057557600080fd5b5061057e611c05565b60405161058b9190614041565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190613d97565b611c38565b6040516105c89190613941565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f391906145f6565b611c5e565b6040516106059190613941565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190614671565b611ccf565b60405161064291906139fc565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906146b1565b611d6c565b005b60006106808383611e00565b905092915050565b60006106a482610696611ed3565b611f0090919063ffffffff16565b9050919050565b60008888116106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690614794565b60405180910390fd5b8489896106fc91906147e3565b1161073c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073390614863565b60405180910390fd5b85871161077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906148cf565b60405180910390fd5b60648311156107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b99061493b565b60405180910390fd5b60006107cc611f6b565b905060006107d982610e8a565b905060008c8c8c8c8c8c8c8c8a8a6040516020016108009a99989796959493929190614a00565b60405160208183030381529060405290506000610835866108278480519060200120611fa7565b611fd790919063ffffffff16565b905061083f611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790614afc565b60405180910390fd5b6108e36108db611ffe565b60020161202b565b94506108ef858f612039565b6109026108fa611ffe565b60020161206e565b61095261090d611ffe565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061206e565b60006040518061012001604052808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018673ffffffffffffffffffffffffffffffffffffffff16815260200160008152509050806109b6612084565b6000016000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080155905050858573ffffffffffffffffffffffffffffffffffffffff167f889de1a576ddf6ed9570e1a2354ffe87302c20bd8af57b5bd4e3bbc84240e7f660405160405180910390a350505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610ada6120b1565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90614b68565b60405180910390fd5b82610b5d6120de565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610ba86120b1565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610c3a8561210b565b83610c43611ffe565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610c8d611ffe565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610cd7611ffe565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610d2b61212e565b60000160008481526020019081526020016000208054610d4a90614bb7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7690614bb7565b8015610dc35780601f10610d9857610100808354040283529160200191610dc3565b820191906000526020600020905b815481529060010190602001808311610da657829003601f168201915b50505050509050600081511415610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690614c35565b60405180910390fd5b610e1761212e565b60010181604051602001610e2c929190614ce9565b604051602081830303815290604052915050919050565b6000610e69610e5061215b565b6001016000848152602001908152602001600020612188565b9050919050565b6000610e85610e7d611ffe565b60020161202b565b905090565b6000610edc610e97611ffe565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061202b565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f235750610f228533611ccf565b5b610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990614d7f565b60405180910390fd5b610f7033868686868661219d565b5050505050565b6000610f81611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790614e11565b60405180910390fd5b6000610ffa6121c1565b60000190506000845167ffffffffffffffff81111561101c5761101b613a32565b5b60405190808252806020026020018201604052801561104a5781602001602082028036833780820191505090505b50905060005b855181101561119357600073ffffffffffffffffffffffffffffffffffffffff1686828151811061108457611083614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614ed2565b60405180910390fd5b8260008683815181106110f9576110f8614e31565b5b60200260200101518152602001908152602001600020600087838151811061112457611123614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061117a57611179614e31565b5b6020026020010181815250508080600101915050611050565b50809250505092915050565b60006111a96120de565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008061120d612084565b6000016000848152602001908152602001600020905080600001544211801561123a575080600101544211155b611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614f3e565b60405180910390fd5b60008160050154146112d05780600501548160080154106112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690614faa565b60405180910390fd5b5b61138b8160405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611bb6565b915050919050565b61139b613745565b60006113a5612084565b600001600084815260200190815260200160002060405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160088201548152505090506000816000015114156114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90615016565b60405180910390fd5b80915050919050565b606060006114ca61215b565b6001016000848152602001908152602001600020905060006114eb82612188565b67ffffffffffffffff81111561150457611503613a32565b5b6040519080825280602002602001820160405280156115325781602001602082028036833780820191505090505b50905060005b61154183612188565b8110156115bb5761155b81846121ee90919063ffffffff16565b82828151811061156e5761156d614e31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806115b390615036565b915050611538565b508092505050919050565b606060006115d261215b565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061161f82612208565b67ffffffffffffffff81111561163857611637613a32565b5b6040519080825280602002602001820160405280156116665781602001602082028036833780820191505090505b50905060005b61167583612208565b8110156116c15761168f818461221d90919063ffffffff16565b8282815181106116a2576116a1614e31565b5b60200260200101818152505080806116b990615036565b91505061166c565b508092505050919050565b6000806116d7611f6b565b905060006116e3612084565b60000160008581526020019081526020016000209050806000015442118015611710575080600101544211155b61174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690614f3e565b60405180910390fd5b60008160050154146117a65780600501548160080154106117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90614faa565b60405180910390fd5b5b60006118638260405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611bb6565b9050803410156118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f906150cb565b60405180910390fd5b6118c48386600160405180602001604052806000815250612237565b60018260080160008282546118d991906150eb565b925050819055506001858473ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a46000606483600601543461193a9190615141565b61194491906151ca565b90506000813461195491906147e3565b90508360070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156119c0573d6000803e3d6000fd5b506119c9611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611a32573d6000803e3d6000fd5b50600195505050505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa79061526d565b60405180910390fd5b80611ab96121c1565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611baa91906139fc565b60405180910390a35050565b600080826000015142611bc991906147e3565b9050600083600001518460200151611be191906147e3565b9050611bfc8282866040015187606001518860800151611c5e565b92505050919050565b6000611c0f611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611c4261215b565b6000016000838152602001908152602001600020549050919050565b6000848385611c6d91906147e3565b87611c789190615141565b8486611c8491906147e3565b8489611c90919061528d565b611c9a9190615141565b8688611ca69190615141565b611cb091906150eb565b611cba91906147e3565b611cc491906151ca565b905095945050505050565b6000611cd96121c1565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611dac5750611dab8533611ccf565b5b611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de290614d7f565b60405180910390fd5b611df9338686868686612258565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890615330565b60405180910390fd5b611e796121c1565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006018600036905010158015611f875750611f863361119f565b5b15611f9b57601436033560601c9050611fa3565b339050611fa4565b5b90565b600081604051602001611fba91906153c7565b604051602081830303815290604052805190602001209050919050565b6000806000611fe6858561227c565b91509150611ff3816122ff565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061204261212e565b600001600084815260200190815260200160002090805190602001906120699291906137a7565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061211461212e565b600101908051906020019061212a9291906137a7565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000612196826000016124d4565b9050919050565b6121ab8686868686866124e5565b6121b98686868686866126cc565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b60006121fd83600001836129d8565b60001c905092915050565b6000612216826000016124d4565b9050919050565b600061222c83600001836129d8565b60001c905092915050565b61224633600086868686612a4c565b61225284848484612c33565b50505050565b612266868686868686612a4c565b612274868686868686612dbd565b505050505050565b6000806041835114156122be5760008060006020860151925060408601519150606086015160001a90506122b287828585613035565b945094505050506122f8565b6040835114156122ef5760008060208501519150604085015190506122e4868383613142565b9350935050506122f8565b60006002915091505b9250929050565b60006004811115612313576123126153ed565b5b816004811115612326576123256153ed565b5b1415612331576124d1565b60016004811115612345576123446153ed565b5b816004811115612358576123576153ed565b5b1415612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090615468565b60405180910390fd5b600260048111156123ad576123ac6153ed565b5b8160048111156123c0576123bf6153ed565b5b1415612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f8906154d4565b60405180910390fd5b60036004811115612415576124146153ed565b5b816004811115612428576124276153ed565b5b1415612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246090615566565b60405180910390fd5b60048081111561247c5761247b6153ed565b5b81600481111561248f5761248e6153ed565b5b14156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c7906155f8565b60405180910390fd5b5b50565b600081600001805490509050919050565b6125048473ffffffffffffffffffffffffffffffffffffffff16613190565b156126c4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161254a95949392919061566d565b602060405180830381600087803b15801561256457600080fd5b505af192505050801561259557506040513d601f19601f8201168201806040525081019061259291906156ea565b60015b61263b576125a1615724565b806308c379a014156125fe57506125b6615746565b806125c15750612600565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f59190613e4c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126329061584e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b9906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615972565b60405180910390fd5b8151835114612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790615a04565b60405180910390fd5b61278e8686868686866131a3565b60006127986121c1565b600001905060005b84518110156129505760008582815181106127be576127bd614e31565b5b6020026020010151905060008583815181106127dd576127dc614e31565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590615a96565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461293491906150eb565b925050819055505050808061294890615036565b9150506127a0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129c7929190615ab6565b60405180910390a450505050505050565b600081836000018054905011612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90615b5f565b60405180910390fd5b826000018281548110612a3957612a38614e31565b5b9060005260206000200154905092915050565b612a6b8473ffffffffffffffffffffffffffffffffffffffff16613190565b15612c2b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ab1959493929190615b7f565b602060405180830381600087803b158015612acb57600080fd5b505af1925050508015612afc57506040513d601f19601f82011682018060405250810190612af991906156ea565b60015b612ba257612b08615724565b806308c379a01415612b655750612b1d615746565b80612b285750612b67565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c9190613e4c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b999061584e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c20906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90615c4b565b60405180910390fd5b612cc233600086612cb3876131b9565b612cbc876131b9565b866131a3565b6000612ccc6121c1565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3091906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612dae929190615c6b565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2490615972565b60405180910390fd5b612e4b868686612e3c876131b9565b612e45876131b9565b866131a3565b6000612e556121c1565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee890615a96565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fa791906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051613024929190615c6b565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613070576000600391509150613139565b601b8560ff16141580156130885750601c8560ff1614155b1561309a576000600491509150613139565b6000600187878787604051600081526020016040526040516130bf9493929190615cbf565b6020604051602081039080840390855afa1580156130e1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561313057600060019250925050613139565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061318287828885613035565b935093505050935093915050565b600080823b905060008111915050919050565b6131b1868686868686613233565b505050505050565b60606000600167ffffffffffffffff8111156131d8576131d7613a32565b5b6040519080825280602002602001820160405280156132065781602001602082028036833780820191505090505b509050828160008151811061321e5761321d614e31565b5b60200260200101818152505080915050919050565b613241868686868686613249565b505050505050565b613257868686868686613504565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146134fc57600061329461215b565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156134f657600087828151811061334957613348614e31565b5b6020026020010151905060008111156134e257600089838151811061337157613370614e31565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156133e1578187600001600083815260200190815260200160002060008282546133d591906150eb565b9250508190555061342d565b816133ec8d83611e00565b141561342c576134168c87600084815260200190815260200160002061350c90919063ffffffff16565b5061342a818661353c90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156134935781876000016000838152602001908152602001600020600082825461348791906147e3565b925050819055506134e0565b600061349f8c83611e00565b14156134df576134c98b87600084815260200190815260200160002061355690919063ffffffff16565b506134dd818561358690919063ffffffff16565b505b5b505b5080806134ee90615036565b91505061332b565b50505050505b505050505050565b505050505050565b6000613534836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6135a0565b905092915050565b600061354e836000018360001b6135a0565b905092915050565b600061357e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6136b2565b905092915050565b6000613598836000018360001b6136b2565b905092915050565b600080836001016000848152602001908152602001600020549050600081146136a65760006001826135d291906147e3565b9050600085600001600187600001805490506135ee91906147e3565b815481106135ff576135fe614e31565b5b906000526020600020015490508086600001838154811061362357613622614e31565b5b906000526020600020018190555060018261363e91906150eb565b866001016000838152602001908152602001600020819055508560000180548061366b5761366a615d04565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506136ac565b60009150505b92915050565b60006136be8383613722565b61371757826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061371c565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b8280546137b390614bb7565b90600052602060002090601f0160209004810192826137d5576000855561381c565b82601f106137ee57805160ff191683800117855561381c565b8280016001018555821561381c579182015b8281111561381b578251825591602001919060010190613800565b5b509050613829919061382d565b5090565b5b8082111561384657600081600090555060010161382e565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138898261385e565b9050919050565b6138998161387e565b81146138a457600080fd5b50565b6000813590506138b681613890565b92915050565b6000819050919050565b6138cf816138bc565b81146138da57600080fd5b50565b6000813590506138ec816138c6565b92915050565b6000806040838503121561390957613908613854565b5b6000613917858286016138a7565b9250506020613928858286016138dd565b9150509250929050565b61393b816138bc565b82525050565b60006020820190506139566000830184613932565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139918161395c565b811461399c57600080fd5b50565b6000813590506139ae81613988565b92915050565b6000602082840312156139ca576139c9613854565b5b60006139d88482850161399f565b91505092915050565b60008115159050919050565b6139f6816139e1565b82525050565b6000602082019050613a1160008301846139ed565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a6a82613a21565b810181811067ffffffffffffffff82111715613a8957613a88613a32565b5b80604052505050565b6000613a9c61384a565b9050613aa88282613a61565b919050565b600067ffffffffffffffff821115613ac857613ac7613a32565b5b613ad182613a21565b9050602081019050919050565b82818337600083830152505050565b6000613b00613afb84613aad565b613a92565b905082815260208101848484011115613b1c57613b1b613a1c565b5b613b27848285613ade565b509392505050565b600082601f830112613b4457613b43613a17565b5b8135613b54848260208601613aed565b91505092915050565b600067ffffffffffffffff821115613b7857613b77613a32565b5b613b8182613a21565b9050602081019050919050565b6000613ba1613b9c84613b5d565b613a92565b905082815260208101848484011115613bbd57613bbc613a1c565b5b613bc8848285613ade565b509392505050565b600082601f830112613be557613be4613a17565b5b8135613bf5848260208601613b8e565b91505092915050565b60008060008060008060008060006101208a8c031215613c2157613c20613854565b5b60008a013567ffffffffffffffff811115613c3f57613c3e613859565b5b613c4b8c828d01613b2f565b9950506020613c5c8c828d016138dd565b9850506040613c6d8c828d016138dd565b9750506060613c7e8c828d016138dd565b9650506080613c8f8c828d016138dd565b95505060a0613ca08c828d016138dd565b94505060c0613cb18c828d016138dd565b93505060e0613cc28c828d016138dd565b9250506101008a013567ffffffffffffffff811115613ce457613ce3613859565b5b613cf08c828d01613bd0565b9150509295985092959850929598565b600080600080600060a08688031215613d1c57613d1b613854565b5b600086013567ffffffffffffffff811115613d3a57613d39613859565b5b613d4688828901613b2f565b9550506020613d57888289016138a7565b9450506040613d68888289016138a7565b9350506060613d79888289016138a7565b9250506080613d8a888289016138a7565b9150509295509295909350565b600060208284031215613dad57613dac613854565b5b6000613dbb848285016138dd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dfe578082015181840152602081019050613de3565b83811115613e0d576000848401525b50505050565b6000613e1e82613dc4565b613e288185613dcf565b9350613e38818560208601613de0565b613e4181613a21565b840191505092915050565b60006020820190508181036000830152613e668184613e13565b905092915050565b600060208284031215613e8457613e83613854565b5b6000613e92848285016138a7565b91505092915050565b600067ffffffffffffffff821115613eb657613eb5613a32565b5b602082029050602081019050919050565b600080fd5b6000613edf613eda84613e9b565b613a92565b90508083825260208201905060208402830185811115613f0257613f01613ec7565b5b835b81811015613f2b5780613f1788826138dd565b845260208401935050602081019050613f04565b5050509392505050565b600082601f830112613f4a57613f49613a17565b5b8135613f5a848260208601613ecc565b91505092915050565b600080600080600060a08688031215613f7f57613f7e613854565b5b6000613f8d888289016138a7565b9550506020613f9e888289016138a7565b945050604086013567ffffffffffffffff811115613fbf57613fbe613859565b5b613fcb88828901613f35565b935050606086013567ffffffffffffffff811115613fec57613feb613859565b5b613ff888828901613f35565b925050608086013567ffffffffffffffff81111561401957614018613859565b5b61402588828901613bd0565b9150509295509295909350565b61403b8161387e565b82525050565b60006020820190506140566000830184614032565b92915050565b600067ffffffffffffffff82111561407757614076613a32565b5b602082029050602081019050919050565b600061409b6140968461405c565b613a92565b905080838252602082019050602084028301858111156140be576140bd613ec7565b5b835b818110156140e757806140d388826138a7565b8452602084019350506020810190506140c0565b5050509392505050565b600082601f83011261410657614105613a17565b5b8135614116848260208601614088565b91505092915050565b6000806040838503121561413657614135613854565b5b600083013567ffffffffffffffff81111561415457614153613859565b5b614160858286016140f1565b925050602083013567ffffffffffffffff81111561418157614180613859565b5b61418d85828601613f35565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6141cc816138bc565b82525050565b60006141de83836141c3565b60208301905092915050565b6000602082019050919050565b600061420282614197565b61420c81856141a2565b9350614217836141b3565b8060005b8381101561424857815161422f88826141d2565b975061423a836141ea565b92505060018101905061421b565b5085935050505092915050565b6000602082019050818103600083015261426f81846141f7565b905092915050565b60006142828261385e565b9050919050565b61429281614277565b82525050565b610120820160008201516142af60008501826141c3565b5060208201516142c260208501826141c3565b5060408201516142d560408501826141c3565b5060608201516142e860608501826141c3565b5060808201516142fb60808501826141c3565b5060a082015161430e60a08501826141c3565b5060c082015161432160c08501826141c3565b5060e082015161433460e0850182614289565b506101008201516143496101008501826141c3565b50505050565b6000610120820190506143656000830184614298565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143a08161387e565b82525050565b60006143b28383614397565b60208301905092915050565b6000602082019050919050565b60006143d68261436b565b6143e08185614376565b93506143eb83614387565b8060005b8381101561441c57815161440388826143a6565b975061440e836143be565b9250506001810190506143ef565b5085935050505092915050565b6000602082019050818103600083015261444381846143cb565b905092915050565b614454816139e1565b811461445f57600080fd5b50565b6000813590506144718161444b565b92915050565b6000806040838503121561448e5761448d613854565b5b600061449c858286016138a7565b92505060206144ad85828601614462565b9150509250929050565b600080fd5b6144c581614277565b81146144d057600080fd5b50565b6000813590506144e2816144bc565b92915050565b600061012082840312156144ff576144fe6144b7565b5b61450a610120613a92565b9050600061451a848285016138dd565b600083015250602061452e848285016138dd565b6020830152506040614542848285016138dd565b6040830152506060614556848285016138dd565b606083015250608061456a848285016138dd565b60808301525060a061457e848285016138dd565b60a08301525060c0614592848285016138dd565b60c08301525060e06145a6848285016144d3565b60e0830152506101006145bb848285016138dd565b6101008301525092915050565b600061012082840312156145df576145de613854565b5b60006145ed848285016144e8565b91505092915050565b600080600080600060a0868803121561461257614611613854565b5b6000614620888289016138dd565b9550506020614631888289016138dd565b9450506040614642888289016138dd565b9350506060614653888289016138dd565b9250506080614664888289016138dd565b9150509295509295909350565b6000806040838503121561468857614687613854565b5b6000614696858286016138a7565b92505060206146a7858286016138a7565b9150509250929050565b600080600080600060a086880312156146cd576146cc613854565b5b60006146db888289016138a7565b95505060206146ec888289016138a7565b94505060406146fd888289016138dd565b935050606061470e888289016138dd565b925050608086013567ffffffffffffffff81111561472f5761472e613859565b5b61473b88828901613bd0565b9150509295509295909350565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b600061477e600283613dcf565b915061478982614748565b602082019050919050565b600060208201905081810360008301526147ad81614771565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147ee826138bc565b91506147f9836138bc565b92508282101561480c5761480b6147b4565b5b828203905092915050565b7f4953000000000000000000000000000000000000000000000000000000000000600082015250565b600061484d600283613dcf565b915061485882614817565b602082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148b9600283613dcf565b91506148c482614883565b602082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000614925600383613dcf565b9150614930826148ef565b602082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b600081905092915050565b600061497182613dc4565b61497b818561495b565b935061498b818560208601613de0565b80840191505092915050565b6000819050919050565b6149b26149ad826138bc565b614997565b82525050565b60008160601b9050919050565b60006149d0826149b8565b9050919050565b60006149e2826149c5565b9050919050565b6149fa6149f58261387e565b6149d7565b82525050565b6000614a0c828d614966565b9150614a18828c6149a1565b602082019150614a28828b6149a1565b602082019150614a38828a6149a1565b602082019150614a4882896149a1565b602082019150614a5882886149a1565b602082019150614a6882876149a1565b602082019150614a7882866149a1565b602082019150614a8882856149e9565b601482019150614a9882846149a1565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ae6600283613dcf565b9150614af182614ab0565b602082019050919050565b60006020820190508181036000830152614b1581614ad9565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b52600283613dcf565b9150614b5d82614b1c565b602082019050919050565b60006020820190508181036000830152614b8181614b45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bcf57607f821691505b60208210811415614be357614be2614b88565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c1f601d83613dcf565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b60008190508160005260206000209050919050565b60008154614c7781614bb7565b614c81818661495b565b94506001821660008114614c9c5760018114614cad57614ce0565b60ff19831686528186019350614ce0565b614cb685614c55565b60005b83811015614cd857815481890152600182019150602081019050614cb9565b838801955050505b50505092915050565b6000614cf58285614c6a565b9150614d018284614966565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d69602983613dcf565b9150614d7482614d0d565b604082019050919050565b60006020820190508181036000830152614d9881614d5c565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614dfb602983613dcf565b9150614e0682614d9f565b604082019050919050565b60006020820190508181036000830152614e2a81614dee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ebc603183613dcf565b9150614ec782614e60565b604082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000614f28600383613dcf565b9150614f3382614ef2565b602082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f94600283613dcf565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000615000600383613dcf565b915061500b82614fca565b602082019050919050565b6000602082019050818103600083015261502f81614ff3565b9050919050565b6000615041826138bc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615074576150736147b4565b5b600182019050919050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006150b5600283613dcf565b91506150c08261507f565b602082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b60006150f6826138bc565b9150615101836138bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615136576151356147b4565b5b828201905092915050565b600061514c826138bc565b9150615157836138bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151905761518f6147b4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151d5826138bc565b91506151e0836138bc565b9250826151f0576151ef61519b565b5b828204905092915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615257602983613dcf565b9150615262826151fb565b604082019050919050565b600060208201905081810360008301526152868161524a565b9050919050565b6000615298826138bc565b91506152a3836138bc565b9250826152b3576152b261519b565b5b828206905092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061531a602b83613dcf565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000615386601c8361495b565b915061539182615350565b601c82019050919050565b6000819050919050565b6000819050919050565b6153c16153bc8261539c565b6153a6565b82525050565b60006153d282615379565b91506153de82846153b0565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615452601883613dcf565b915061545d8261541c565b602082019050919050565b6000602082019050818103600083015261548181615445565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006154be601f83613dcf565b91506154c982615488565b602082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615550602283613dcf565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602283613dcf565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061563f82615618565b6156498185615623565b9350615659818560208601613de0565b61566281613a21565b840191505092915050565b600060a0820190506156826000830188614032565b61568f6020830187614032565b81810360408301526156a181866141f7565b905081810360608301526156b581856141f7565b905081810360808301526156c98184615634565b90509695505050505050565b6000815190506156e481613988565b92915050565b600060208284031215615700576156ff613854565b5b600061570e848285016156d5565b91505092915050565b60008160e01c9050919050565b600060033d11156157435760046000803e615740600051615717565b90505b90565b600060443d1015615756576157d9565b61575e61384a565b60043d036004823e80513d602482011167ffffffffffffffff821117156157865750506157d9565b808201805167ffffffffffffffff8111156157a457505050506157d9565b80602083010160043d0385018111156157c15750505050506157d9565b6157d082602001850186613a61565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615838603483613dcf565b9150615843826157dc565b604082019050919050565b600060208201905081810360008301526158678161582b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006158ca602883613dcf565b91506158d58261586e565b604082019050919050565b600060208201905081810360008301526158f9816158bd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061595c602583613dcf565b915061596782615900565b604082019050919050565b6000602082019050818103600083015261598b8161594f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006159ee602883613dcf565b91506159f982615992565b604082019050919050565b60006020820190508181036000830152615a1d816159e1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615a80602b83613dcf565b9150615a8b82615a24565b604082019050919050565b60006020820190508181036000830152615aaf81615a73565b9050919050565b60006040820190508181036000830152615ad081856141f7565b90508181036020830152615ae481846141f7565b90509392505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b49602283613dcf565b9150615b5482615aed565b604082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b600060a082019050615b946000830188614032565b615ba16020830187614032565b615bae6040830186613932565b615bbb6060830185613932565b8181036080830152615bcd8184615634565b90509695505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c35602183613dcf565b9150615c4082615bd9565b604082019050919050565b60006020820190508181036000830152615c6481615c28565b9050919050565b6000604082019050615c806000830185613932565b615c8d6020830184613932565b9392505050565b615c9d8161539c565b82525050565b600060ff82169050919050565b615cb981615ca3565b82525050565b6000608082019050615cd46000830187615c94565b615ce16020830186615cb0565b615cee6040830185615c94565b615cfb6060830184615c94565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220beb547aca22aec1511830d598e6b56ee28a81e9b1a961c4bc30b1c0a5d99d14c64736f6c63430008090033' + '0x608060405234801561001057600080fd5b50615d6980620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063a22cb4651161006f578063a22cb46514610540578063bc01188e14610569578063bd85b03914610594578063d61b0c82146105d1578063e985e9c51461060e578063f242432a1461064b5761014a565b80635c5ed16d146103df5780635e28bc541461041c5780636787d449146104595780636dcfd8411461049657806385bff2e7146104d3578063a0712d68146105105761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b50610176600480360381019061017191906138f2565b610674565b6040516101839190613941565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae91906139b4565b610688565b6040516101c091906139fc565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613bfe565b6106ab565b6040516101fd9190613941565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613d00565b610abb565b005b34801561023b57600080fd5b5061025660048036038101906102519190613d97565b610d1f565b6040516102639190613e4c565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613d97565b610e43565b6040516102a09190613941565b60405180910390f35b3480156102b557600080fd5b506102be610e70565b6040516102cb9190613941565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613e6e565b610e8a565b6040516103089190613941565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613f63565b610ee3565b005b34801561034657600080fd5b5061034f610f77565b60405161035c9190614041565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061411f565b610faa565b6040516103999190614255565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613e6e565b61119f565b6040516103d691906139fc565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613d97565b611202565b6040516104139190613941565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e919061439a565b611393565b6040516104509190613941565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613d97565b6113e2565b60405161048d919061448e565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613d97565b61150d565b6040516104ca9190614568565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613e6e565b611615565b6040516105079190614255565b60405180910390f35b61052a60048036038101906105259190613d97565b61171b565b60405161053791906139fc565b60405180910390f35b34801561054c57600080fd5b50610567600480360381019061056291906145b6565b611a90565b005b34801561057557600080fd5b5061057e611c05565b60405161058b9190614041565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190613d97565b611c38565b6040516105c89190613941565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f391906145f6565b611c5e565b6040516106059190613941565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190614671565b611ccf565b60405161064291906139fc565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906146b1565b611d6c565b005b60006106808383611e00565b905092915050565b60006106a482610696611ed3565b611f0090919063ffffffff16565b9050919050565b60008888116106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690614794565b60405180910390fd5b8489896106fc91906147e3565b1161073c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073390614863565b60405180910390fd5b85871161077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906148cf565b60405180910390fd5b60648311156107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b99061493b565b60405180910390fd5b60006107cc611f6b565b905060006107d982610e8a565b905060008c8c8c8c8c8c8c8c8a8a6040516020016108009a99989796959493929190614a00565b60405160208183030381529060405290506000610835866108278480519060200120611fa7565b611fd790919063ffffffff16565b905061083f611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790614afc565b60405180910390fd5b6108e36108db611ffe565b60020161202b565b94506108ef858f612039565b6109026108fa611ffe565b60020161206e565b61095261090d611ffe565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061206e565b60006040518061012001604052808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018673ffffffffffffffffffffffffffffffffffffffff16815260200160008152509050806109b6612084565b6000016000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080155905050858573ffffffffffffffffffffffffffffffffffffffff167f889de1a576ddf6ed9570e1a2354ffe87302c20bd8af57b5bd4e3bbc84240e7f660405160405180910390a350505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610ada6120b1565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90614b68565b60405180910390fd5b82610b5d6120de565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610ba86120b1565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610c3a8561210b565b83610c43611ffe565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610c8d611ffe565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610cd7611ffe565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610d2b61212e565b60000160008481526020019081526020016000208054610d4a90614bb7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7690614bb7565b8015610dc35780601f10610d9857610100808354040283529160200191610dc3565b820191906000526020600020905b815481529060010190602001808311610da657829003601f168201915b50505050509050600081511415610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690614c35565b60405180910390fd5b610e1761212e565b60010181604051602001610e2c929190614ce9565b604051602081830303815290604052915050919050565b6000610e69610e5061215b565b6001016000848152602001908152602001600020612188565b9050919050565b6000610e85610e7d611ffe565b60020161202b565b905090565b6000610edc610e97611ffe565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061202b565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f235750610f228533611ccf565b5b610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990614d7f565b60405180910390fd5b610f7033868686868661219d565b5050505050565b6000610f81611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790614e11565b60405180910390fd5b6000610ffa6121c1565b60000190506000845167ffffffffffffffff81111561101c5761101b613a32565b5b60405190808252806020026020018201604052801561104a5781602001602082028036833780820191505090505b50905060005b855181101561119357600073ffffffffffffffffffffffffffffffffffffffff1686828151811061108457611083614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614ed2565b60405180910390fd5b8260008683815181106110f9576110f8614e31565b5b60200260200101518152602001908152602001600020600087838151811061112457611123614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061117a57611179614e31565b5b6020026020010181815250508080600101915050611050565b50809250505092915050565b60006111a96120de565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008061120d612084565b6000016000848152602001908152602001600020905080600001544211801561123a575080600101544211155b611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614f3e565b60405180910390fd5b60008160050154146112d05780600501548160080154106112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690614faa565b60405180910390fd5b5b61138b8160405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611393565b915050919050565b6000808260000151426113a691906147e3565b90506000836000015184602001516113be91906147e3565b90506113d98282866040015187606001518860800151611c5e565b92505050919050565b6113ea613745565b60006113f4612084565b600001600084815260200190815260200160002060405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820154815250509050600081600001511415611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90615016565b60405180910390fd5b80915050919050565b6060600061151961215b565b60010160008481526020019081526020016000209050600061153a82612188565b67ffffffffffffffff81111561155357611552613a32565b5b6040519080825280602002602001820160405280156115815781602001602082028036833780820191505090505b50905060005b61159083612188565b81101561160a576115aa81846121ee90919063ffffffff16565b8282815181106115bd576115bc614e31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061160290615036565b915050611587565b508092505050919050565b6060600061162161215b565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061166e82612208565b67ffffffffffffffff81111561168757611686613a32565b5b6040519080825280602002602001820160405280156116b55781602001602082028036833780820191505090505b50905060005b6116c483612208565b811015611710576116de818461221d90919063ffffffff16565b8282815181106116f1576116f0614e31565b5b602002602001018181525050808061170890615036565b9150506116bb565b508092505050919050565b600080611726611f6b565b90506000611732612084565b6000016000858152602001908152602001600020905080600001544211801561175f575080600101544211155b61179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590614f3e565b60405180910390fd5b60008160050154146117f55780600501548160080154106117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90614faa565b60405180910390fd5b5b60006118b28260405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611393565b9050803410156118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee906150cb565b60405180910390fd5b6119138386600160405180602001604052806000815250612237565b600182600801600082825461192891906150eb565b925050819055506001858473ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4600060648360060154346119899190615141565b61199391906151ca565b9050600081346119a391906147e3565b90508360070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611a0f573d6000803e3d6000fd5b50611a18611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611a81573d6000803e3d6000fd5b50600195505050505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af69061526d565b60405180910390fd5b80611b086121c1565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bf991906139fc565b60405180910390a35050565b6000611c0f611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611c4261215b565b6000016000838152602001908152602001600020549050919050565b6000848385611c6d91906147e3565b87611c789190615141565b8486611c8491906147e3565b8489611c90919061528d565b611c9a9190615141565b8688611ca69190615141565b611cb091906150eb565b611cba91906147e3565b611cc491906151ca565b905095945050505050565b6000611cd96121c1565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611dac5750611dab8533611ccf565b5b611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de290614d7f565b60405180910390fd5b611df9338686868686612258565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890615330565b60405180910390fd5b611e796121c1565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006018600036905010158015611f875750611f863361119f565b5b15611f9b57601436033560601c9050611fa3565b339050611fa4565b5b90565b600081604051602001611fba91906153c7565b604051602081830303815290604052805190602001209050919050565b6000806000611fe6858561227c565b91509150611ff3816122ff565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061204261212e565b600001600084815260200190815260200160002090805190602001906120699291906137a7565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061211461212e565b600101908051906020019061212a9291906137a7565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000612196826000016124d4565b9050919050565b6121ab8686868686866124e5565b6121b98686868686866126cc565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b60006121fd83600001836129d8565b60001c905092915050565b6000612216826000016124d4565b9050919050565b600061222c83600001836129d8565b60001c905092915050565b61224633600086868686612a4c565b61225284848484612c33565b50505050565b612266868686868686612a4c565b612274868686868686612dbd565b505050505050565b6000806041835114156122be5760008060006020860151925060408601519150606086015160001a90506122b287828585613035565b945094505050506122f8565b6040835114156122ef5760008060208501519150604085015190506122e4868383613142565b9350935050506122f8565b60006002915091505b9250929050565b60006004811115612313576123126153ed565b5b816004811115612326576123256153ed565b5b1415612331576124d1565b60016004811115612345576123446153ed565b5b816004811115612358576123576153ed565b5b1415612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090615468565b60405180910390fd5b600260048111156123ad576123ac6153ed565b5b8160048111156123c0576123bf6153ed565b5b1415612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f8906154d4565b60405180910390fd5b60036004811115612415576124146153ed565b5b816004811115612428576124276153ed565b5b1415612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246090615566565b60405180910390fd5b60048081111561247c5761247b6153ed565b5b81600481111561248f5761248e6153ed565b5b14156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c7906155f8565b60405180910390fd5b5b50565b600081600001805490509050919050565b6125048473ffffffffffffffffffffffffffffffffffffffff16613190565b156126c4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161254a95949392919061566d565b602060405180830381600087803b15801561256457600080fd5b505af192505050801561259557506040513d601f19601f8201168201806040525081019061259291906156ea565b60015b61263b576125a1615724565b806308c379a014156125fe57506125b6615746565b806125c15750612600565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f59190613e4c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126329061584e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b9906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615972565b60405180910390fd5b8151835114612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790615a04565b60405180910390fd5b61278e8686868686866131a3565b60006127986121c1565b600001905060005b84518110156129505760008582815181106127be576127bd614e31565b5b6020026020010151905060008583815181106127dd576127dc614e31565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590615a96565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461293491906150eb565b925050819055505050808061294890615036565b9150506127a0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129c7929190615ab6565b60405180910390a450505050505050565b600081836000018054905011612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90615b5f565b60405180910390fd5b826000018281548110612a3957612a38614e31565b5b9060005260206000200154905092915050565b612a6b8473ffffffffffffffffffffffffffffffffffffffff16613190565b15612c2b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ab1959493929190615b7f565b602060405180830381600087803b158015612acb57600080fd5b505af1925050508015612afc57506040513d601f19601f82011682018060405250810190612af991906156ea565b60015b612ba257612b08615724565b806308c379a01415612b655750612b1d615746565b80612b285750612b67565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c9190613e4c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b999061584e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c20906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90615c4b565b60405180910390fd5b612cc233600086612cb3876131b9565b612cbc876131b9565b866131a3565b6000612ccc6121c1565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3091906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612dae929190615c6b565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2490615972565b60405180910390fd5b612e4b868686612e3c876131b9565b612e45876131b9565b866131a3565b6000612e556121c1565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee890615a96565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fa791906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051613024929190615c6b565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613070576000600391509150613139565b601b8560ff16141580156130885750601c8560ff1614155b1561309a576000600491509150613139565b6000600187878787604051600081526020016040526040516130bf9493929190615cbf565b6020604051602081039080840390855afa1580156130e1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561313057600060019250925050613139565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061318287828885613035565b935093505050935093915050565b600080823b905060008111915050919050565b6131b1868686868686613233565b505050505050565b60606000600167ffffffffffffffff8111156131d8576131d7613a32565b5b6040519080825280602002602001820160405280156132065781602001602082028036833780820191505090505b509050828160008151811061321e5761321d614e31565b5b60200260200101818152505080915050919050565b613241868686868686613249565b505050505050565b613257868686868686613504565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146134fc57600061329461215b565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156134f657600087828151811061334957613348614e31565b5b6020026020010151905060008111156134e257600089838151811061337157613370614e31565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156133e1578187600001600083815260200190815260200160002060008282546133d591906150eb565b9250508190555061342d565b816133ec8d83611e00565b141561342c576134168c87600084815260200190815260200160002061350c90919063ffffffff16565b5061342a818661353c90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156134935781876000016000838152602001908152602001600020600082825461348791906147e3565b925050819055506134e0565b600061349f8c83611e00565b14156134df576134c98b87600084815260200190815260200160002061355690919063ffffffff16565b506134dd818561358690919063ffffffff16565b505b5b505b5080806134ee90615036565b91505061332b565b50505050505b505050505050565b505050505050565b6000613534836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6135a0565b905092915050565b600061354e836000018360001b6135a0565b905092915050565b600061357e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6136b2565b905092915050565b6000613598836000018360001b6136b2565b905092915050565b600080836001016000848152602001908152602001600020549050600081146136a65760006001826135d291906147e3565b9050600085600001600187600001805490506135ee91906147e3565b815481106135ff576135fe614e31565b5b906000526020600020015490508086600001838154811061362357613622614e31565b5b906000526020600020018190555060018261363e91906150eb565b866001016000838152602001908152602001600020819055508560000180548061366b5761366a615d04565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506136ac565b60009150505b92915050565b60006136be8383613722565b61371757826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061371c565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b8280546137b390614bb7565b90600052602060002090601f0160209004810192826137d5576000855561381c565b82601f106137ee57805160ff191683800117855561381c565b8280016001018555821561381c579182015b8281111561381b578251825591602001919060010190613800565b5b509050613829919061382d565b5090565b5b8082111561384657600081600090555060010161382e565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138898261385e565b9050919050565b6138998161387e565b81146138a457600080fd5b50565b6000813590506138b681613890565b92915050565b6000819050919050565b6138cf816138bc565b81146138da57600080fd5b50565b6000813590506138ec816138c6565b92915050565b6000806040838503121561390957613908613854565b5b6000613917858286016138a7565b9250506020613928858286016138dd565b9150509250929050565b61393b816138bc565b82525050565b60006020820190506139566000830184613932565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139918161395c565b811461399c57600080fd5b50565b6000813590506139ae81613988565b92915050565b6000602082840312156139ca576139c9613854565b5b60006139d88482850161399f565b91505092915050565b60008115159050919050565b6139f6816139e1565b82525050565b6000602082019050613a1160008301846139ed565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a6a82613a21565b810181811067ffffffffffffffff82111715613a8957613a88613a32565b5b80604052505050565b6000613a9c61384a565b9050613aa88282613a61565b919050565b600067ffffffffffffffff821115613ac857613ac7613a32565b5b613ad182613a21565b9050602081019050919050565b82818337600083830152505050565b6000613b00613afb84613aad565b613a92565b905082815260208101848484011115613b1c57613b1b613a1c565b5b613b27848285613ade565b509392505050565b600082601f830112613b4457613b43613a17565b5b8135613b54848260208601613aed565b91505092915050565b600067ffffffffffffffff821115613b7857613b77613a32565b5b613b8182613a21565b9050602081019050919050565b6000613ba1613b9c84613b5d565b613a92565b905082815260208101848484011115613bbd57613bbc613a1c565b5b613bc8848285613ade565b509392505050565b600082601f830112613be557613be4613a17565b5b8135613bf5848260208601613b8e565b91505092915050565b60008060008060008060008060006101208a8c031215613c2157613c20613854565b5b60008a013567ffffffffffffffff811115613c3f57613c3e613859565b5b613c4b8c828d01613b2f565b9950506020613c5c8c828d016138dd565b9850506040613c6d8c828d016138dd565b9750506060613c7e8c828d016138dd565b9650506080613c8f8c828d016138dd565b95505060a0613ca08c828d016138dd565b94505060c0613cb18c828d016138dd565b93505060e0613cc28c828d016138dd565b9250506101008a013567ffffffffffffffff811115613ce457613ce3613859565b5b613cf08c828d01613bd0565b9150509295985092959850929598565b600080600080600060a08688031215613d1c57613d1b613854565b5b600086013567ffffffffffffffff811115613d3a57613d39613859565b5b613d4688828901613b2f565b9550506020613d57888289016138a7565b9450506040613d68888289016138a7565b9350506060613d79888289016138a7565b9250506080613d8a888289016138a7565b9150509295509295909350565b600060208284031215613dad57613dac613854565b5b6000613dbb848285016138dd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dfe578082015181840152602081019050613de3565b83811115613e0d576000848401525b50505050565b6000613e1e82613dc4565b613e288185613dcf565b9350613e38818560208601613de0565b613e4181613a21565b840191505092915050565b60006020820190508181036000830152613e668184613e13565b905092915050565b600060208284031215613e8457613e83613854565b5b6000613e92848285016138a7565b91505092915050565b600067ffffffffffffffff821115613eb657613eb5613a32565b5b602082029050602081019050919050565b600080fd5b6000613edf613eda84613e9b565b613a92565b90508083825260208201905060208402830185811115613f0257613f01613ec7565b5b835b81811015613f2b5780613f1788826138dd565b845260208401935050602081019050613f04565b5050509392505050565b600082601f830112613f4a57613f49613a17565b5b8135613f5a848260208601613ecc565b91505092915050565b600080600080600060a08688031215613f7f57613f7e613854565b5b6000613f8d888289016138a7565b9550506020613f9e888289016138a7565b945050604086013567ffffffffffffffff811115613fbf57613fbe613859565b5b613fcb88828901613f35565b935050606086013567ffffffffffffffff811115613fec57613feb613859565b5b613ff888828901613f35565b925050608086013567ffffffffffffffff81111561401957614018613859565b5b61402588828901613bd0565b9150509295509295909350565b61403b8161387e565b82525050565b60006020820190506140566000830184614032565b92915050565b600067ffffffffffffffff82111561407757614076613a32565b5b602082029050602081019050919050565b600061409b6140968461405c565b613a92565b905080838252602082019050602084028301858111156140be576140bd613ec7565b5b835b818110156140e757806140d388826138a7565b8452602084019350506020810190506140c0565b5050509392505050565b600082601f83011261410657614105613a17565b5b8135614116848260208601614088565b91505092915050565b6000806040838503121561413657614135613854565b5b600083013567ffffffffffffffff81111561415457614153613859565b5b614160858286016140f1565b925050602083013567ffffffffffffffff81111561418157614180613859565b5b61418d85828601613f35565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6141cc816138bc565b82525050565b60006141de83836141c3565b60208301905092915050565b6000602082019050919050565b600061420282614197565b61420c81856141a2565b9350614217836141b3565b8060005b8381101561424857815161422f88826141d2565b975061423a836141ea565b92505060018101905061421b565b5085935050505092915050565b6000602082019050818103600083015261426f81846141f7565b905092915050565b600080fd5b60006142878261385e565b9050919050565b6142978161427c565b81146142a257600080fd5b50565b6000813590506142b48161428e565b92915050565b600061012082840312156142d1576142d0614277565b5b6142dc610120613a92565b905060006142ec848285016138dd565b6000830152506020614300848285016138dd565b6020830152506040614314848285016138dd565b6040830152506060614328848285016138dd565b606083015250608061433c848285016138dd565b60808301525060a0614350848285016138dd565b60a08301525060c0614364848285016138dd565b60c08301525060e0614378848285016142a5565b60e08301525061010061438d848285016138dd565b6101008301525092915050565b600061012082840312156143b1576143b0613854565b5b60006143bf848285016142ba565b91505092915050565b6143d18161427c565b82525050565b610120820160008201516143ee60008501826141c3565b50602082015161440160208501826141c3565b50604082015161441460408501826141c3565b50606082015161442760608501826141c3565b50608082015161443a60808501826141c3565b5060a082015161444d60a08501826141c3565b5060c082015161446060c08501826141c3565b5060e082015161447360e08501826143c8565b506101008201516144886101008501826141c3565b50505050565b6000610120820190506144a460008301846143d7565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144df8161387e565b82525050565b60006144f183836144d6565b60208301905092915050565b6000602082019050919050565b6000614515826144aa565b61451f81856144b5565b935061452a836144c6565b8060005b8381101561455b57815161454288826144e5565b975061454d836144fd565b92505060018101905061452e565b5085935050505092915050565b60006020820190508181036000830152614582818461450a565b905092915050565b614593816139e1565b811461459e57600080fd5b50565b6000813590506145b08161458a565b92915050565b600080604083850312156145cd576145cc613854565b5b60006145db858286016138a7565b92505060206145ec858286016145a1565b9150509250929050565b600080600080600060a0868803121561461257614611613854565b5b6000614620888289016138dd565b9550506020614631888289016138dd565b9450506040614642888289016138dd565b9350506060614653888289016138dd565b9250506080614664888289016138dd565b9150509295509295909350565b6000806040838503121561468857614687613854565b5b6000614696858286016138a7565b92505060206146a7858286016138a7565b9150509250929050565b600080600080600060a086880312156146cd576146cc613854565b5b60006146db888289016138a7565b95505060206146ec888289016138a7565b94505060406146fd888289016138dd565b935050606061470e888289016138dd565b925050608086013567ffffffffffffffff81111561472f5761472e613859565b5b61473b88828901613bd0565b9150509295509295909350565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b600061477e600283613dcf565b915061478982614748565b602082019050919050565b600060208201905081810360008301526147ad81614771565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147ee826138bc565b91506147f9836138bc565b92508282101561480c5761480b6147b4565b5b828203905092915050565b7f4953000000000000000000000000000000000000000000000000000000000000600082015250565b600061484d600283613dcf565b915061485882614817565b602082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148b9600283613dcf565b91506148c482614883565b602082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000614925600383613dcf565b9150614930826148ef565b602082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b600081905092915050565b600061497182613dc4565b61497b818561495b565b935061498b818560208601613de0565b80840191505092915050565b6000819050919050565b6149b26149ad826138bc565b614997565b82525050565b60008160601b9050919050565b60006149d0826149b8565b9050919050565b60006149e2826149c5565b9050919050565b6149fa6149f58261387e565b6149d7565b82525050565b6000614a0c828d614966565b9150614a18828c6149a1565b602082019150614a28828b6149a1565b602082019150614a38828a6149a1565b602082019150614a4882896149a1565b602082019150614a5882886149a1565b602082019150614a6882876149a1565b602082019150614a7882866149a1565b602082019150614a8882856149e9565b601482019150614a9882846149a1565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ae6600283613dcf565b9150614af182614ab0565b602082019050919050565b60006020820190508181036000830152614b1581614ad9565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b52600283613dcf565b9150614b5d82614b1c565b602082019050919050565b60006020820190508181036000830152614b8181614b45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bcf57607f821691505b60208210811415614be357614be2614b88565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c1f601d83613dcf565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b60008190508160005260206000209050919050565b60008154614c7781614bb7565b614c81818661495b565b94506001821660008114614c9c5760018114614cad57614ce0565b60ff19831686528186019350614ce0565b614cb685614c55565b60005b83811015614cd857815481890152600182019150602081019050614cb9565b838801955050505b50505092915050565b6000614cf58285614c6a565b9150614d018284614966565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d69602983613dcf565b9150614d7482614d0d565b604082019050919050565b60006020820190508181036000830152614d9881614d5c565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614dfb602983613dcf565b9150614e0682614d9f565b604082019050919050565b60006020820190508181036000830152614e2a81614dee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ebc603183613dcf565b9150614ec782614e60565b604082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000614f28600383613dcf565b9150614f3382614ef2565b602082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f94600283613dcf565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000615000600383613dcf565b915061500b82614fca565b602082019050919050565b6000602082019050818103600083015261502f81614ff3565b9050919050565b6000615041826138bc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615074576150736147b4565b5b600182019050919050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006150b5600283613dcf565b91506150c08261507f565b602082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b60006150f6826138bc565b9150615101836138bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615136576151356147b4565b5b828201905092915050565b600061514c826138bc565b9150615157836138bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151905761518f6147b4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151d5826138bc565b91506151e0836138bc565b9250826151f0576151ef61519b565b5b828204905092915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615257602983613dcf565b9150615262826151fb565b604082019050919050565b600060208201905081810360008301526152868161524a565b9050919050565b6000615298826138bc565b91506152a3836138bc565b9250826152b3576152b261519b565b5b828206905092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061531a602b83613dcf565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000615386601c8361495b565b915061539182615350565b601c82019050919050565b6000819050919050565b6000819050919050565b6153c16153bc8261539c565b6153a6565b82525050565b60006153d282615379565b91506153de82846153b0565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615452601883613dcf565b915061545d8261541c565b602082019050919050565b6000602082019050818103600083015261548181615445565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006154be601f83613dcf565b91506154c982615488565b602082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615550602283613dcf565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602283613dcf565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061563f82615618565b6156498185615623565b9350615659818560208601613de0565b61566281613a21565b840191505092915050565b600060a0820190506156826000830188614032565b61568f6020830187614032565b81810360408301526156a181866141f7565b905081810360608301526156b581856141f7565b905081810360808301526156c98184615634565b90509695505050505050565b6000815190506156e481613988565b92915050565b600060208284031215615700576156ff613854565b5b600061570e848285016156d5565b91505092915050565b60008160e01c9050919050565b600060033d11156157435760046000803e615740600051615717565b90505b90565b600060443d1015615756576157d9565b61575e61384a565b60043d036004823e80513d602482011167ffffffffffffffff821117156157865750506157d9565b808201805167ffffffffffffffff8111156157a457505050506157d9565b80602083010160043d0385018111156157c15750505050506157d9565b6157d082602001850186613a61565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615838603483613dcf565b9150615843826157dc565b604082019050919050565b600060208201905081810360008301526158678161582b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006158ca602883613dcf565b91506158d58261586e565b604082019050919050565b600060208201905081810360008301526158f9816158bd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061595c602583613dcf565b915061596782615900565b604082019050919050565b6000602082019050818103600083015261598b8161594f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006159ee602883613dcf565b91506159f982615992565b604082019050919050565b60006020820190508181036000830152615a1d816159e1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615a80602b83613dcf565b9150615a8b82615a24565b604082019050919050565b60006020820190508181036000830152615aaf81615a73565b9050919050565b60006040820190508181036000830152615ad081856141f7565b90508181036020830152615ae481846141f7565b90509392505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b49602283613dcf565b9150615b5482615aed565b604082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b600060a082019050615b946000830188614032565b615ba16020830187614032565b615bae6040830186613932565b615bbb6060830185613932565b8181036080830152615bcd8184615634565b90509695505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c35602183613dcf565b9150615c4082615bd9565b604082019050919050565b60006020820190508181036000830152615c6481615c28565b9050919050565b6000604082019050615c806000830185613932565b615c8d6020830184613932565b9392505050565b615c9d8161539c565b82525050565b600060ff82169050919050565b615cb981615ca3565b82525050565b6000608082019050615cd46000830187615c94565b615ce16020830186615cb0565b615cee6040830185615c94565b615cfb6060830184615c94565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220df110964b4a5c057cc4d855e8fd5bde2825a2227c2cae961f155c58f9f18b27164736f6c63430008090033' type CyberDestinationFactoryFacetConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts b/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts index b846d68..b46f09b 100644 --- a/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts @@ -419,7 +419,7 @@ const _abi = [ type: 'tuple', }, ], - name: 'getMintPrice', + name: 'getMintPriceForDrop', outputs: [ { internalType: 'uint256', @@ -823,7 +823,7 @@ const _abi = [ ] const _bytecode = - '0x608060405234801561001057600080fd5b50615d6980620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063ab12881a1161006f578063ab12881a1461052c578063bc01188e14610569578063bd85b03914610594578063d61b0c82146105d1578063e985e9c51461060e578063f242432a1461064b5761014a565b80635c5ed16d146103df5780636787d4491461041c5780636dcfd8411461045957806385bff2e714610496578063a0712d68146104d3578063a22cb465146105035761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b50610176600480360381019061017191906138f2565b610674565b6040516101839190613941565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae91906139b4565b610688565b6040516101c091906139fc565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613bfe565b6106ab565b6040516101fd9190613941565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613d00565b610abb565b005b34801561023b57600080fd5b5061025660048036038101906102519190613d97565b610d1f565b6040516102639190613e4c565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613d97565b610e43565b6040516102a09190613941565b60405180910390f35b3480156102b557600080fd5b506102be610e70565b6040516102cb9190613941565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613e6e565b610e8a565b6040516103089190613941565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613f63565b610ee3565b005b34801561034657600080fd5b5061034f610f77565b60405161035c9190614041565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061411f565b610faa565b6040516103999190614255565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613e6e565b61119f565b6040516103d691906139fc565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613d97565b611202565b6040516104139190613941565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613d97565b611393565b604051610450919061434f565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613d97565b6114be565b60405161048d9190614429565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613e6e565b6115c6565b6040516104ca9190614255565b60405180910390f35b6104ed60048036038101906104e89190613d97565b6116cc565b6040516104fa91906139fc565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190614477565b611a41565b005b34801561053857600080fd5b50610553600480360381019061054e91906145c8565b611bb6565b6040516105609190613941565b60405180910390f35b34801561057557600080fd5b5061057e611c05565b60405161058b9190614041565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190613d97565b611c38565b6040516105c89190613941565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f391906145f6565b611c5e565b6040516106059190613941565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190614671565b611ccf565b60405161064291906139fc565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906146b1565b611d6c565b005b60006106808383611e00565b905092915050565b60006106a482610696611ed3565b611f0090919063ffffffff16565b9050919050565b60008888116106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690614794565b60405180910390fd5b8489896106fc91906147e3565b1161073c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073390614863565b60405180910390fd5b85871161077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906148cf565b60405180910390fd5b60648311156107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b99061493b565b60405180910390fd5b60006107cc611f6b565b905060006107d982610e8a565b905060008c8c8c8c8c8c8c8c8a8a6040516020016108009a99989796959493929190614a00565b60405160208183030381529060405290506000610835866108278480519060200120611fa7565b611fd790919063ffffffff16565b905061083f611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790614afc565b60405180910390fd5b6108e36108db611ffe565b60020161202b565b94506108ef858f612039565b6109026108fa611ffe565b60020161206e565b61095261090d611ffe565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061206e565b60006040518061012001604052808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018673ffffffffffffffffffffffffffffffffffffffff16815260200160008152509050806109b6612084565b6000016000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080155905050858573ffffffffffffffffffffffffffffffffffffffff167f889de1a576ddf6ed9570e1a2354ffe87302c20bd8af57b5bd4e3bbc84240e7f660405160405180910390a350505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610ada6120b1565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90614b68565b60405180910390fd5b82610b5d6120de565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610ba86120b1565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610c3a8561210b565b83610c43611ffe565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610c8d611ffe565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610cd7611ffe565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610d2b61212e565b60000160008481526020019081526020016000208054610d4a90614bb7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7690614bb7565b8015610dc35780601f10610d9857610100808354040283529160200191610dc3565b820191906000526020600020905b815481529060010190602001808311610da657829003601f168201915b50505050509050600081511415610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690614c35565b60405180910390fd5b610e1761212e565b60010181604051602001610e2c929190614ce9565b604051602081830303815290604052915050919050565b6000610e69610e5061215b565b6001016000848152602001908152602001600020612188565b9050919050565b6000610e85610e7d611ffe565b60020161202b565b905090565b6000610edc610e97611ffe565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061202b565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f235750610f228533611ccf565b5b610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990614d7f565b60405180910390fd5b610f7033868686868661219d565b5050505050565b6000610f81611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790614e11565b60405180910390fd5b6000610ffa6121c1565b60000190506000845167ffffffffffffffff81111561101c5761101b613a32565b5b60405190808252806020026020018201604052801561104a5781602001602082028036833780820191505090505b50905060005b855181101561119357600073ffffffffffffffffffffffffffffffffffffffff1686828151811061108457611083614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614ed2565b60405180910390fd5b8260008683815181106110f9576110f8614e31565b5b60200260200101518152602001908152602001600020600087838151811061112457611123614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061117a57611179614e31565b5b6020026020010181815250508080600101915050611050565b50809250505092915050565b60006111a96120de565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008061120d612084565b6000016000848152602001908152602001600020905080600001544211801561123a575080600101544211155b611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614f3e565b60405180910390fd5b60008160050154146112d05780600501548160080154106112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690614faa565b60405180910390fd5b5b61138b8160405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611bb6565b915050919050565b61139b613745565b60006113a5612084565b600001600084815260200190815260200160002060405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160088201548152505090506000816000015114156114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90615016565b60405180910390fd5b80915050919050565b606060006114ca61215b565b6001016000848152602001908152602001600020905060006114eb82612188565b67ffffffffffffffff81111561150457611503613a32565b5b6040519080825280602002602001820160405280156115325781602001602082028036833780820191505090505b50905060005b61154183612188565b8110156115bb5761155b81846121ee90919063ffffffff16565b82828151811061156e5761156d614e31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806115b390615036565b915050611538565b508092505050919050565b606060006115d261215b565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061161f82612208565b67ffffffffffffffff81111561163857611637613a32565b5b6040519080825280602002602001820160405280156116665781602001602082028036833780820191505090505b50905060005b61167583612208565b8110156116c15761168f818461221d90919063ffffffff16565b8282815181106116a2576116a1614e31565b5b60200260200101818152505080806116b990615036565b91505061166c565b508092505050919050565b6000806116d7611f6b565b905060006116e3612084565b60000160008581526020019081526020016000209050806000015442118015611710575080600101544211155b61174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690614f3e565b60405180910390fd5b60008160050154146117a65780600501548160080154106117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90614faa565b60405180910390fd5b5b60006118638260405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611bb6565b9050803410156118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f906150cb565b60405180910390fd5b6118c48386600160405180602001604052806000815250612237565b60018260080160008282546118d991906150eb565b925050819055506001858473ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a46000606483600601543461193a9190615141565b61194491906151ca565b90506000813461195491906147e3565b90508360070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156119c0573d6000803e3d6000fd5b506119c9611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611a32573d6000803e3d6000fd5b50600195505050505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa79061526d565b60405180910390fd5b80611ab96121c1565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611baa91906139fc565b60405180910390a35050565b600080826000015142611bc991906147e3565b9050600083600001518460200151611be191906147e3565b9050611bfc8282866040015187606001518860800151611c5e565b92505050919050565b6000611c0f611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611c4261215b565b6000016000838152602001908152602001600020549050919050565b6000848385611c6d91906147e3565b87611c789190615141565b8486611c8491906147e3565b8489611c90919061528d565b611c9a9190615141565b8688611ca69190615141565b611cb091906150eb565b611cba91906147e3565b611cc491906151ca565b905095945050505050565b6000611cd96121c1565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611dac5750611dab8533611ccf565b5b611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de290614d7f565b60405180910390fd5b611df9338686868686612258565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890615330565b60405180910390fd5b611e796121c1565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006018600036905010158015611f875750611f863361119f565b5b15611f9b57601436033560601c9050611fa3565b339050611fa4565b5b90565b600081604051602001611fba91906153c7565b604051602081830303815290604052805190602001209050919050565b6000806000611fe6858561227c565b91509150611ff3816122ff565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061204261212e565b600001600084815260200190815260200160002090805190602001906120699291906137a7565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061211461212e565b600101908051906020019061212a9291906137a7565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000612196826000016124d4565b9050919050565b6121ab8686868686866124e5565b6121b98686868686866126cc565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b60006121fd83600001836129d8565b60001c905092915050565b6000612216826000016124d4565b9050919050565b600061222c83600001836129d8565b60001c905092915050565b61224633600086868686612a4c565b61225284848484612c33565b50505050565b612266868686868686612a4c565b612274868686868686612dbd565b505050505050565b6000806041835114156122be5760008060006020860151925060408601519150606086015160001a90506122b287828585613035565b945094505050506122f8565b6040835114156122ef5760008060208501519150604085015190506122e4868383613142565b9350935050506122f8565b60006002915091505b9250929050565b60006004811115612313576123126153ed565b5b816004811115612326576123256153ed565b5b1415612331576124d1565b60016004811115612345576123446153ed565b5b816004811115612358576123576153ed565b5b1415612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090615468565b60405180910390fd5b600260048111156123ad576123ac6153ed565b5b8160048111156123c0576123bf6153ed565b5b1415612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f8906154d4565b60405180910390fd5b60036004811115612415576124146153ed565b5b816004811115612428576124276153ed565b5b1415612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246090615566565b60405180910390fd5b60048081111561247c5761247b6153ed565b5b81600481111561248f5761248e6153ed565b5b14156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c7906155f8565b60405180910390fd5b5b50565b600081600001805490509050919050565b6125048473ffffffffffffffffffffffffffffffffffffffff16613190565b156126c4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161254a95949392919061566d565b602060405180830381600087803b15801561256457600080fd5b505af192505050801561259557506040513d601f19601f8201168201806040525081019061259291906156ea565b60015b61263b576125a1615724565b806308c379a014156125fe57506125b6615746565b806125c15750612600565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f59190613e4c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126329061584e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b9906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615972565b60405180910390fd5b8151835114612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790615a04565b60405180910390fd5b61278e8686868686866131a3565b60006127986121c1565b600001905060005b84518110156129505760008582815181106127be576127bd614e31565b5b6020026020010151905060008583815181106127dd576127dc614e31565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590615a96565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461293491906150eb565b925050819055505050808061294890615036565b9150506127a0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129c7929190615ab6565b60405180910390a450505050505050565b600081836000018054905011612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90615b5f565b60405180910390fd5b826000018281548110612a3957612a38614e31565b5b9060005260206000200154905092915050565b612a6b8473ffffffffffffffffffffffffffffffffffffffff16613190565b15612c2b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ab1959493929190615b7f565b602060405180830381600087803b158015612acb57600080fd5b505af1925050508015612afc57506040513d601f19601f82011682018060405250810190612af991906156ea565b60015b612ba257612b08615724565b806308c379a01415612b655750612b1d615746565b80612b285750612b67565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c9190613e4c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b999061584e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c20906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90615c4b565b60405180910390fd5b612cc233600086612cb3876131b9565b612cbc876131b9565b866131a3565b6000612ccc6121c1565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3091906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612dae929190615c6b565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2490615972565b60405180910390fd5b612e4b868686612e3c876131b9565b612e45876131b9565b866131a3565b6000612e556121c1565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee890615a96565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fa791906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051613024929190615c6b565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613070576000600391509150613139565b601b8560ff16141580156130885750601c8560ff1614155b1561309a576000600491509150613139565b6000600187878787604051600081526020016040526040516130bf9493929190615cbf565b6020604051602081039080840390855afa1580156130e1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561313057600060019250925050613139565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061318287828885613035565b935093505050935093915050565b600080823b905060008111915050919050565b6131b1868686868686613233565b505050505050565b60606000600167ffffffffffffffff8111156131d8576131d7613a32565b5b6040519080825280602002602001820160405280156132065781602001602082028036833780820191505090505b509050828160008151811061321e5761321d614e31565b5b60200260200101818152505080915050919050565b613241868686868686613249565b505050505050565b613257868686868686613504565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146134fc57600061329461215b565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156134f657600087828151811061334957613348614e31565b5b6020026020010151905060008111156134e257600089838151811061337157613370614e31565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156133e1578187600001600083815260200190815260200160002060008282546133d591906150eb565b9250508190555061342d565b816133ec8d83611e00565b141561342c576134168c87600084815260200190815260200160002061350c90919063ffffffff16565b5061342a818661353c90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156134935781876000016000838152602001908152602001600020600082825461348791906147e3565b925050819055506134e0565b600061349f8c83611e00565b14156134df576134c98b87600084815260200190815260200160002061355690919063ffffffff16565b506134dd818561358690919063ffffffff16565b505b5b505b5080806134ee90615036565b91505061332b565b50505050505b505050505050565b505050505050565b6000613534836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6135a0565b905092915050565b600061354e836000018360001b6135a0565b905092915050565b600061357e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6136b2565b905092915050565b6000613598836000018360001b6136b2565b905092915050565b600080836001016000848152602001908152602001600020549050600081146136a65760006001826135d291906147e3565b9050600085600001600187600001805490506135ee91906147e3565b815481106135ff576135fe614e31565b5b906000526020600020015490508086600001838154811061362357613622614e31565b5b906000526020600020018190555060018261363e91906150eb565b866001016000838152602001908152602001600020819055508560000180548061366b5761366a615d04565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506136ac565b60009150505b92915050565b60006136be8383613722565b61371757826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061371c565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b8280546137b390614bb7565b90600052602060002090601f0160209004810192826137d5576000855561381c565b82601f106137ee57805160ff191683800117855561381c565b8280016001018555821561381c579182015b8281111561381b578251825591602001919060010190613800565b5b509050613829919061382d565b5090565b5b8082111561384657600081600090555060010161382e565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138898261385e565b9050919050565b6138998161387e565b81146138a457600080fd5b50565b6000813590506138b681613890565b92915050565b6000819050919050565b6138cf816138bc565b81146138da57600080fd5b50565b6000813590506138ec816138c6565b92915050565b6000806040838503121561390957613908613854565b5b6000613917858286016138a7565b9250506020613928858286016138dd565b9150509250929050565b61393b816138bc565b82525050565b60006020820190506139566000830184613932565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139918161395c565b811461399c57600080fd5b50565b6000813590506139ae81613988565b92915050565b6000602082840312156139ca576139c9613854565b5b60006139d88482850161399f565b91505092915050565b60008115159050919050565b6139f6816139e1565b82525050565b6000602082019050613a1160008301846139ed565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a6a82613a21565b810181811067ffffffffffffffff82111715613a8957613a88613a32565b5b80604052505050565b6000613a9c61384a565b9050613aa88282613a61565b919050565b600067ffffffffffffffff821115613ac857613ac7613a32565b5b613ad182613a21565b9050602081019050919050565b82818337600083830152505050565b6000613b00613afb84613aad565b613a92565b905082815260208101848484011115613b1c57613b1b613a1c565b5b613b27848285613ade565b509392505050565b600082601f830112613b4457613b43613a17565b5b8135613b54848260208601613aed565b91505092915050565b600067ffffffffffffffff821115613b7857613b77613a32565b5b613b8182613a21565b9050602081019050919050565b6000613ba1613b9c84613b5d565b613a92565b905082815260208101848484011115613bbd57613bbc613a1c565b5b613bc8848285613ade565b509392505050565b600082601f830112613be557613be4613a17565b5b8135613bf5848260208601613b8e565b91505092915050565b60008060008060008060008060006101208a8c031215613c2157613c20613854565b5b60008a013567ffffffffffffffff811115613c3f57613c3e613859565b5b613c4b8c828d01613b2f565b9950506020613c5c8c828d016138dd565b9850506040613c6d8c828d016138dd565b9750506060613c7e8c828d016138dd565b9650506080613c8f8c828d016138dd565b95505060a0613ca08c828d016138dd565b94505060c0613cb18c828d016138dd565b93505060e0613cc28c828d016138dd565b9250506101008a013567ffffffffffffffff811115613ce457613ce3613859565b5b613cf08c828d01613bd0565b9150509295985092959850929598565b600080600080600060a08688031215613d1c57613d1b613854565b5b600086013567ffffffffffffffff811115613d3a57613d39613859565b5b613d4688828901613b2f565b9550506020613d57888289016138a7565b9450506040613d68888289016138a7565b9350506060613d79888289016138a7565b9250506080613d8a888289016138a7565b9150509295509295909350565b600060208284031215613dad57613dac613854565b5b6000613dbb848285016138dd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dfe578082015181840152602081019050613de3565b83811115613e0d576000848401525b50505050565b6000613e1e82613dc4565b613e288185613dcf565b9350613e38818560208601613de0565b613e4181613a21565b840191505092915050565b60006020820190508181036000830152613e668184613e13565b905092915050565b600060208284031215613e8457613e83613854565b5b6000613e92848285016138a7565b91505092915050565b600067ffffffffffffffff821115613eb657613eb5613a32565b5b602082029050602081019050919050565b600080fd5b6000613edf613eda84613e9b565b613a92565b90508083825260208201905060208402830185811115613f0257613f01613ec7565b5b835b81811015613f2b5780613f1788826138dd565b845260208401935050602081019050613f04565b5050509392505050565b600082601f830112613f4a57613f49613a17565b5b8135613f5a848260208601613ecc565b91505092915050565b600080600080600060a08688031215613f7f57613f7e613854565b5b6000613f8d888289016138a7565b9550506020613f9e888289016138a7565b945050604086013567ffffffffffffffff811115613fbf57613fbe613859565b5b613fcb88828901613f35565b935050606086013567ffffffffffffffff811115613fec57613feb613859565b5b613ff888828901613f35565b925050608086013567ffffffffffffffff81111561401957614018613859565b5b61402588828901613bd0565b9150509295509295909350565b61403b8161387e565b82525050565b60006020820190506140566000830184614032565b92915050565b600067ffffffffffffffff82111561407757614076613a32565b5b602082029050602081019050919050565b600061409b6140968461405c565b613a92565b905080838252602082019050602084028301858111156140be576140bd613ec7565b5b835b818110156140e757806140d388826138a7565b8452602084019350506020810190506140c0565b5050509392505050565b600082601f83011261410657614105613a17565b5b8135614116848260208601614088565b91505092915050565b6000806040838503121561413657614135613854565b5b600083013567ffffffffffffffff81111561415457614153613859565b5b614160858286016140f1565b925050602083013567ffffffffffffffff81111561418157614180613859565b5b61418d85828601613f35565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6141cc816138bc565b82525050565b60006141de83836141c3565b60208301905092915050565b6000602082019050919050565b600061420282614197565b61420c81856141a2565b9350614217836141b3565b8060005b8381101561424857815161422f88826141d2565b975061423a836141ea565b92505060018101905061421b565b5085935050505092915050565b6000602082019050818103600083015261426f81846141f7565b905092915050565b60006142828261385e565b9050919050565b61429281614277565b82525050565b610120820160008201516142af60008501826141c3565b5060208201516142c260208501826141c3565b5060408201516142d560408501826141c3565b5060608201516142e860608501826141c3565b5060808201516142fb60808501826141c3565b5060a082015161430e60a08501826141c3565b5060c082015161432160c08501826141c3565b5060e082015161433460e0850182614289565b506101008201516143496101008501826141c3565b50505050565b6000610120820190506143656000830184614298565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143a08161387e565b82525050565b60006143b28383614397565b60208301905092915050565b6000602082019050919050565b60006143d68261436b565b6143e08185614376565b93506143eb83614387565b8060005b8381101561441c57815161440388826143a6565b975061440e836143be565b9250506001810190506143ef565b5085935050505092915050565b6000602082019050818103600083015261444381846143cb565b905092915050565b614454816139e1565b811461445f57600080fd5b50565b6000813590506144718161444b565b92915050565b6000806040838503121561448e5761448d613854565b5b600061449c858286016138a7565b92505060206144ad85828601614462565b9150509250929050565b600080fd5b6144c581614277565b81146144d057600080fd5b50565b6000813590506144e2816144bc565b92915050565b600061012082840312156144ff576144fe6144b7565b5b61450a610120613a92565b9050600061451a848285016138dd565b600083015250602061452e848285016138dd565b6020830152506040614542848285016138dd565b6040830152506060614556848285016138dd565b606083015250608061456a848285016138dd565b60808301525060a061457e848285016138dd565b60a08301525060c0614592848285016138dd565b60c08301525060e06145a6848285016144d3565b60e0830152506101006145bb848285016138dd565b6101008301525092915050565b600061012082840312156145df576145de613854565b5b60006145ed848285016144e8565b91505092915050565b600080600080600060a0868803121561461257614611613854565b5b6000614620888289016138dd565b9550506020614631888289016138dd565b9450506040614642888289016138dd565b9350506060614653888289016138dd565b9250506080614664888289016138dd565b9150509295509295909350565b6000806040838503121561468857614687613854565b5b6000614696858286016138a7565b92505060206146a7858286016138a7565b9150509250929050565b600080600080600060a086880312156146cd576146cc613854565b5b60006146db888289016138a7565b95505060206146ec888289016138a7565b94505060406146fd888289016138dd565b935050606061470e888289016138dd565b925050608086013567ffffffffffffffff81111561472f5761472e613859565b5b61473b88828901613bd0565b9150509295509295909350565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b600061477e600283613dcf565b915061478982614748565b602082019050919050565b600060208201905081810360008301526147ad81614771565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147ee826138bc565b91506147f9836138bc565b92508282101561480c5761480b6147b4565b5b828203905092915050565b7f4953000000000000000000000000000000000000000000000000000000000000600082015250565b600061484d600283613dcf565b915061485882614817565b602082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148b9600283613dcf565b91506148c482614883565b602082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000614925600383613dcf565b9150614930826148ef565b602082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b600081905092915050565b600061497182613dc4565b61497b818561495b565b935061498b818560208601613de0565b80840191505092915050565b6000819050919050565b6149b26149ad826138bc565b614997565b82525050565b60008160601b9050919050565b60006149d0826149b8565b9050919050565b60006149e2826149c5565b9050919050565b6149fa6149f58261387e565b6149d7565b82525050565b6000614a0c828d614966565b9150614a18828c6149a1565b602082019150614a28828b6149a1565b602082019150614a38828a6149a1565b602082019150614a4882896149a1565b602082019150614a5882886149a1565b602082019150614a6882876149a1565b602082019150614a7882866149a1565b602082019150614a8882856149e9565b601482019150614a9882846149a1565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ae6600283613dcf565b9150614af182614ab0565b602082019050919050565b60006020820190508181036000830152614b1581614ad9565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b52600283613dcf565b9150614b5d82614b1c565b602082019050919050565b60006020820190508181036000830152614b8181614b45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bcf57607f821691505b60208210811415614be357614be2614b88565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c1f601d83613dcf565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b60008190508160005260206000209050919050565b60008154614c7781614bb7565b614c81818661495b565b94506001821660008114614c9c5760018114614cad57614ce0565b60ff19831686528186019350614ce0565b614cb685614c55565b60005b83811015614cd857815481890152600182019150602081019050614cb9565b838801955050505b50505092915050565b6000614cf58285614c6a565b9150614d018284614966565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d69602983613dcf565b9150614d7482614d0d565b604082019050919050565b60006020820190508181036000830152614d9881614d5c565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614dfb602983613dcf565b9150614e0682614d9f565b604082019050919050565b60006020820190508181036000830152614e2a81614dee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ebc603183613dcf565b9150614ec782614e60565b604082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000614f28600383613dcf565b9150614f3382614ef2565b602082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f94600283613dcf565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000615000600383613dcf565b915061500b82614fca565b602082019050919050565b6000602082019050818103600083015261502f81614ff3565b9050919050565b6000615041826138bc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615074576150736147b4565b5b600182019050919050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006150b5600283613dcf565b91506150c08261507f565b602082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b60006150f6826138bc565b9150615101836138bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615136576151356147b4565b5b828201905092915050565b600061514c826138bc565b9150615157836138bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151905761518f6147b4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151d5826138bc565b91506151e0836138bc565b9250826151f0576151ef61519b565b5b828204905092915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615257602983613dcf565b9150615262826151fb565b604082019050919050565b600060208201905081810360008301526152868161524a565b9050919050565b6000615298826138bc565b91506152a3836138bc565b9250826152b3576152b261519b565b5b828206905092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061531a602b83613dcf565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000615386601c8361495b565b915061539182615350565b601c82019050919050565b6000819050919050565b6000819050919050565b6153c16153bc8261539c565b6153a6565b82525050565b60006153d282615379565b91506153de82846153b0565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615452601883613dcf565b915061545d8261541c565b602082019050919050565b6000602082019050818103600083015261548181615445565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006154be601f83613dcf565b91506154c982615488565b602082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615550602283613dcf565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602283613dcf565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061563f82615618565b6156498185615623565b9350615659818560208601613de0565b61566281613a21565b840191505092915050565b600060a0820190506156826000830188614032565b61568f6020830187614032565b81810360408301526156a181866141f7565b905081810360608301526156b581856141f7565b905081810360808301526156c98184615634565b90509695505050505050565b6000815190506156e481613988565b92915050565b600060208284031215615700576156ff613854565b5b600061570e848285016156d5565b91505092915050565b60008160e01c9050919050565b600060033d11156157435760046000803e615740600051615717565b90505b90565b600060443d1015615756576157d9565b61575e61384a565b60043d036004823e80513d602482011167ffffffffffffffff821117156157865750506157d9565b808201805167ffffffffffffffff8111156157a457505050506157d9565b80602083010160043d0385018111156157c15750505050506157d9565b6157d082602001850186613a61565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615838603483613dcf565b9150615843826157dc565b604082019050919050565b600060208201905081810360008301526158678161582b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006158ca602883613dcf565b91506158d58261586e565b604082019050919050565b600060208201905081810360008301526158f9816158bd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061595c602583613dcf565b915061596782615900565b604082019050919050565b6000602082019050818103600083015261598b8161594f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006159ee602883613dcf565b91506159f982615992565b604082019050919050565b60006020820190508181036000830152615a1d816159e1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615a80602b83613dcf565b9150615a8b82615a24565b604082019050919050565b60006020820190508181036000830152615aaf81615a73565b9050919050565b60006040820190508181036000830152615ad081856141f7565b90508181036020830152615ae481846141f7565b90509392505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b49602283613dcf565b9150615b5482615aed565b604082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b600060a082019050615b946000830188614032565b615ba16020830187614032565b615bae6040830186613932565b615bbb6060830185613932565b8181036080830152615bcd8184615634565b90509695505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c35602183613dcf565b9150615c4082615bd9565b604082019050919050565b60006020820190508181036000830152615c6481615c28565b9050919050565b6000604082019050615c806000830185613932565b615c8d6020830184613932565b9392505050565b615c9d8161539c565b82525050565b600060ff82169050919050565b615cb981615ca3565b82525050565b6000608082019050615cd46000830187615c94565b615ce16020830186615cb0565b615cee6040830185615c94565b615cfb6060830184615c94565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122063d18e41f4eb07bb2ceb229e8d7ff145d47f7464ef3c690581793db960d9acb864736f6c63430008090033' + '0x608060405234801561001057600080fd5b50615d6980620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063a22cb4651161006f578063a22cb46514610540578063bc01188e14610569578063bd85b03914610594578063d61b0c82146105d1578063e985e9c51461060e578063f242432a1461064b5761014a565b80635c5ed16d146103df5780635e28bc541461041c5780636787d449146104595780636dcfd8411461049657806385bff2e7146104d3578063a0712d68146105105761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b50610176600480360381019061017191906138f2565b610674565b6040516101839190613941565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae91906139b4565b610688565b6040516101c091906139fc565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613bfe565b6106ab565b6040516101fd9190613941565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613d00565b610abb565b005b34801561023b57600080fd5b5061025660048036038101906102519190613d97565b610d1f565b6040516102639190613e4c565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613d97565b610e43565b6040516102a09190613941565b60405180910390f35b3480156102b557600080fd5b506102be610e70565b6040516102cb9190613941565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613e6e565b610e8a565b6040516103089190613941565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613f63565b610ee3565b005b34801561034657600080fd5b5061034f610f77565b60405161035c9190614041565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061411f565b610faa565b6040516103999190614255565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613e6e565b61119f565b6040516103d691906139fc565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613d97565b611202565b6040516104139190613941565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e919061439a565b611393565b6040516104509190613941565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613d97565b6113e2565b60405161048d919061448e565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613d97565b61150d565b6040516104ca9190614568565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613e6e565b611615565b6040516105079190614255565b60405180910390f35b61052a60048036038101906105259190613d97565b61171b565b60405161053791906139fc565b60405180910390f35b34801561054c57600080fd5b50610567600480360381019061056291906145b6565b611a90565b005b34801561057557600080fd5b5061057e611c05565b60405161058b9190614041565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190613d97565b611c38565b6040516105c89190613941565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f391906145f6565b611c5e565b6040516106059190613941565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190614671565b611ccf565b60405161064291906139fc565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906146b1565b611d6c565b005b60006106808383611e00565b905092915050565b60006106a482610696611ed3565b611f0090919063ffffffff16565b9050919050565b60008888116106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690614794565b60405180910390fd5b8489896106fc91906147e3565b1161073c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073390614863565b60405180910390fd5b85871161077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906148cf565b60405180910390fd5b60648311156107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b99061493b565b60405180910390fd5b60006107cc611f6b565b905060006107d982610e8a565b905060008c8c8c8c8c8c8c8c8a8a6040516020016108009a99989796959493929190614a00565b60405160208183030381529060405290506000610835866108278480519060200120611fa7565b611fd790919063ffffffff16565b905061083f611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790614afc565b60405180910390fd5b6108e36108db611ffe565b60020161202b565b94506108ef858f612039565b6109026108fa611ffe565b60020161206e565b61095261090d611ffe565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061206e565b60006040518061012001604052808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018673ffffffffffffffffffffffffffffffffffffffff16815260200160008152509050806109b6612084565b6000016000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080155905050858573ffffffffffffffffffffffffffffffffffffffff167f889de1a576ddf6ed9570e1a2354ffe87302c20bd8af57b5bd4e3bbc84240e7f660405160405180910390a350505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610ada6120b1565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90614b68565b60405180910390fd5b82610b5d6120de565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610ba86120b1565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610c3a8561210b565b83610c43611ffe565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610c8d611ffe565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610cd7611ffe565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610d2b61212e565b60000160008481526020019081526020016000208054610d4a90614bb7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7690614bb7565b8015610dc35780601f10610d9857610100808354040283529160200191610dc3565b820191906000526020600020905b815481529060010190602001808311610da657829003601f168201915b50505050509050600081511415610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690614c35565b60405180910390fd5b610e1761212e565b60010181604051602001610e2c929190614ce9565b604051602081830303815290604052915050919050565b6000610e69610e5061215b565b6001016000848152602001908152602001600020612188565b9050919050565b6000610e85610e7d611ffe565b60020161202b565b905090565b6000610edc610e97611ffe565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061202b565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f235750610f228533611ccf565b5b610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990614d7f565b60405180910390fd5b610f7033868686868661219d565b5050505050565b6000610f81611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790614e11565b60405180910390fd5b6000610ffa6121c1565b60000190506000845167ffffffffffffffff81111561101c5761101b613a32565b5b60405190808252806020026020018201604052801561104a5781602001602082028036833780820191505090505b50905060005b855181101561119357600073ffffffffffffffffffffffffffffffffffffffff1686828151811061108457611083614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614ed2565b60405180910390fd5b8260008683815181106110f9576110f8614e31565b5b60200260200101518152602001908152602001600020600087838151811061112457611123614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061117a57611179614e31565b5b6020026020010181815250508080600101915050611050565b50809250505092915050565b60006111a96120de565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008061120d612084565b6000016000848152602001908152602001600020905080600001544211801561123a575080600101544211155b611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614f3e565b60405180910390fd5b60008160050154146112d05780600501548160080154106112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690614faa565b60405180910390fd5b5b61138b8160405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611393565b915050919050565b6000808260000151426113a691906147e3565b90506000836000015184602001516113be91906147e3565b90506113d98282866040015187606001518860800151611c5e565b92505050919050565b6113ea613745565b60006113f4612084565b600001600084815260200190815260200160002060405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820154815250509050600081600001511415611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90615016565b60405180910390fd5b80915050919050565b6060600061151961215b565b60010160008481526020019081526020016000209050600061153a82612188565b67ffffffffffffffff81111561155357611552613a32565b5b6040519080825280602002602001820160405280156115815781602001602082028036833780820191505090505b50905060005b61159083612188565b81101561160a576115aa81846121ee90919063ffffffff16565b8282815181106115bd576115bc614e31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061160290615036565b915050611587565b508092505050919050565b6060600061162161215b565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061166e82612208565b67ffffffffffffffff81111561168757611686613a32565b5b6040519080825280602002602001820160405280156116b55781602001602082028036833780820191505090505b50905060005b6116c483612208565b811015611710576116de818461221d90919063ffffffff16565b8282815181106116f1576116f0614e31565b5b602002602001018181525050808061170890615036565b9150506116bb565b508092505050919050565b600080611726611f6b565b90506000611732612084565b6000016000858152602001908152602001600020905080600001544211801561175f575080600101544211155b61179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590614f3e565b60405180910390fd5b60008160050154146117f55780600501548160080154106117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90614faa565b60405180910390fd5b5b60006118b28260405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611393565b9050803410156118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee906150cb565b60405180910390fd5b6119138386600160405180602001604052806000815250612237565b600182600801600082825461192891906150eb565b925050819055506001858473ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4600060648360060154346119899190615141565b61199391906151ca565b9050600081346119a391906147e3565b90508360070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611a0f573d6000803e3d6000fd5b50611a18611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611a81573d6000803e3d6000fd5b50600195505050505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af69061526d565b60405180910390fd5b80611b086121c1565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bf991906139fc565b60405180910390a35050565b6000611c0f611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611c4261215b565b6000016000838152602001908152602001600020549050919050565b6000848385611c6d91906147e3565b87611c789190615141565b8486611c8491906147e3565b8489611c90919061528d565b611c9a9190615141565b8688611ca69190615141565b611cb091906150eb565b611cba91906147e3565b611cc491906151ca565b905095945050505050565b6000611cd96121c1565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611dac5750611dab8533611ccf565b5b611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de290614d7f565b60405180910390fd5b611df9338686868686612258565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890615330565b60405180910390fd5b611e796121c1565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006018600036905010158015611f875750611f863361119f565b5b15611f9b57601436033560601c9050611fa3565b339050611fa4565b5b90565b600081604051602001611fba91906153c7565b604051602081830303815290604052805190602001209050919050565b6000806000611fe6858561227c565b91509150611ff3816122ff565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061204261212e565b600001600084815260200190815260200160002090805190602001906120699291906137a7565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061211461212e565b600101908051906020019061212a9291906137a7565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000612196826000016124d4565b9050919050565b6121ab8686868686866124e5565b6121b98686868686866126cc565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b60006121fd83600001836129d8565b60001c905092915050565b6000612216826000016124d4565b9050919050565b600061222c83600001836129d8565b60001c905092915050565b61224633600086868686612a4c565b61225284848484612c33565b50505050565b612266868686868686612a4c565b612274868686868686612dbd565b505050505050565b6000806041835114156122be5760008060006020860151925060408601519150606086015160001a90506122b287828585613035565b945094505050506122f8565b6040835114156122ef5760008060208501519150604085015190506122e4868383613142565b9350935050506122f8565b60006002915091505b9250929050565b60006004811115612313576123126153ed565b5b816004811115612326576123256153ed565b5b1415612331576124d1565b60016004811115612345576123446153ed565b5b816004811115612358576123576153ed565b5b1415612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090615468565b60405180910390fd5b600260048111156123ad576123ac6153ed565b5b8160048111156123c0576123bf6153ed565b5b1415612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f8906154d4565b60405180910390fd5b60036004811115612415576124146153ed565b5b816004811115612428576124276153ed565b5b1415612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246090615566565b60405180910390fd5b60048081111561247c5761247b6153ed565b5b81600481111561248f5761248e6153ed565b5b14156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c7906155f8565b60405180910390fd5b5b50565b600081600001805490509050919050565b6125048473ffffffffffffffffffffffffffffffffffffffff16613190565b156126c4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161254a95949392919061566d565b602060405180830381600087803b15801561256457600080fd5b505af192505050801561259557506040513d601f19601f8201168201806040525081019061259291906156ea565b60015b61263b576125a1615724565b806308c379a014156125fe57506125b6615746565b806125c15750612600565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f59190613e4c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126329061584e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b9906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615972565b60405180910390fd5b8151835114612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790615a04565b60405180910390fd5b61278e8686868686866131a3565b60006127986121c1565b600001905060005b84518110156129505760008582815181106127be576127bd614e31565b5b6020026020010151905060008583815181106127dd576127dc614e31565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590615a96565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461293491906150eb565b925050819055505050808061294890615036565b9150506127a0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129c7929190615ab6565b60405180910390a450505050505050565b600081836000018054905011612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90615b5f565b60405180910390fd5b826000018281548110612a3957612a38614e31565b5b9060005260206000200154905092915050565b612a6b8473ffffffffffffffffffffffffffffffffffffffff16613190565b15612c2b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ab1959493929190615b7f565b602060405180830381600087803b158015612acb57600080fd5b505af1925050508015612afc57506040513d601f19601f82011682018060405250810190612af991906156ea565b60015b612ba257612b08615724565b806308c379a01415612b655750612b1d615746565b80612b285750612b67565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c9190613e4c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b999061584e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c20906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90615c4b565b60405180910390fd5b612cc233600086612cb3876131b9565b612cbc876131b9565b866131a3565b6000612ccc6121c1565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3091906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612dae929190615c6b565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2490615972565b60405180910390fd5b612e4b868686612e3c876131b9565b612e45876131b9565b866131a3565b6000612e556121c1565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee890615a96565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fa791906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051613024929190615c6b565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613070576000600391509150613139565b601b8560ff16141580156130885750601c8560ff1614155b1561309a576000600491509150613139565b6000600187878787604051600081526020016040526040516130bf9493929190615cbf565b6020604051602081039080840390855afa1580156130e1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561313057600060019250925050613139565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061318287828885613035565b935093505050935093915050565b600080823b905060008111915050919050565b6131b1868686868686613233565b505050505050565b60606000600167ffffffffffffffff8111156131d8576131d7613a32565b5b6040519080825280602002602001820160405280156132065781602001602082028036833780820191505090505b509050828160008151811061321e5761321d614e31565b5b60200260200101818152505080915050919050565b613241868686868686613249565b505050505050565b613257868686868686613504565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146134fc57600061329461215b565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156134f657600087828151811061334957613348614e31565b5b6020026020010151905060008111156134e257600089838151811061337157613370614e31565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156133e1578187600001600083815260200190815260200160002060008282546133d591906150eb565b9250508190555061342d565b816133ec8d83611e00565b141561342c576134168c87600084815260200190815260200160002061350c90919063ffffffff16565b5061342a818661353c90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156134935781876000016000838152602001908152602001600020600082825461348791906147e3565b925050819055506134e0565b600061349f8c83611e00565b14156134df576134c98b87600084815260200190815260200160002061355690919063ffffffff16565b506134dd818561358690919063ffffffff16565b505b5b505b5080806134ee90615036565b91505061332b565b50505050505b505050505050565b505050505050565b6000613534836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6135a0565b905092915050565b600061354e836000018360001b6135a0565b905092915050565b600061357e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6136b2565b905092915050565b6000613598836000018360001b6136b2565b905092915050565b600080836001016000848152602001908152602001600020549050600081146136a65760006001826135d291906147e3565b9050600085600001600187600001805490506135ee91906147e3565b815481106135ff576135fe614e31565b5b906000526020600020015490508086600001838154811061362357613622614e31565b5b906000526020600020018190555060018261363e91906150eb565b866001016000838152602001908152602001600020819055508560000180548061366b5761366a615d04565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506136ac565b60009150505b92915050565b60006136be8383613722565b61371757826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061371c565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b8280546137b390614bb7565b90600052602060002090601f0160209004810192826137d5576000855561381c565b82601f106137ee57805160ff191683800117855561381c565b8280016001018555821561381c579182015b8281111561381b578251825591602001919060010190613800565b5b509050613829919061382d565b5090565b5b8082111561384657600081600090555060010161382e565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138898261385e565b9050919050565b6138998161387e565b81146138a457600080fd5b50565b6000813590506138b681613890565b92915050565b6000819050919050565b6138cf816138bc565b81146138da57600080fd5b50565b6000813590506138ec816138c6565b92915050565b6000806040838503121561390957613908613854565b5b6000613917858286016138a7565b9250506020613928858286016138dd565b9150509250929050565b61393b816138bc565b82525050565b60006020820190506139566000830184613932565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139918161395c565b811461399c57600080fd5b50565b6000813590506139ae81613988565b92915050565b6000602082840312156139ca576139c9613854565b5b60006139d88482850161399f565b91505092915050565b60008115159050919050565b6139f6816139e1565b82525050565b6000602082019050613a1160008301846139ed565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a6a82613a21565b810181811067ffffffffffffffff82111715613a8957613a88613a32565b5b80604052505050565b6000613a9c61384a565b9050613aa88282613a61565b919050565b600067ffffffffffffffff821115613ac857613ac7613a32565b5b613ad182613a21565b9050602081019050919050565b82818337600083830152505050565b6000613b00613afb84613aad565b613a92565b905082815260208101848484011115613b1c57613b1b613a1c565b5b613b27848285613ade565b509392505050565b600082601f830112613b4457613b43613a17565b5b8135613b54848260208601613aed565b91505092915050565b600067ffffffffffffffff821115613b7857613b77613a32565b5b613b8182613a21565b9050602081019050919050565b6000613ba1613b9c84613b5d565b613a92565b905082815260208101848484011115613bbd57613bbc613a1c565b5b613bc8848285613ade565b509392505050565b600082601f830112613be557613be4613a17565b5b8135613bf5848260208601613b8e565b91505092915050565b60008060008060008060008060006101208a8c031215613c2157613c20613854565b5b60008a013567ffffffffffffffff811115613c3f57613c3e613859565b5b613c4b8c828d01613b2f565b9950506020613c5c8c828d016138dd565b9850506040613c6d8c828d016138dd565b9750506060613c7e8c828d016138dd565b9650506080613c8f8c828d016138dd565b95505060a0613ca08c828d016138dd565b94505060c0613cb18c828d016138dd565b93505060e0613cc28c828d016138dd565b9250506101008a013567ffffffffffffffff811115613ce457613ce3613859565b5b613cf08c828d01613bd0565b9150509295985092959850929598565b600080600080600060a08688031215613d1c57613d1b613854565b5b600086013567ffffffffffffffff811115613d3a57613d39613859565b5b613d4688828901613b2f565b9550506020613d57888289016138a7565b9450506040613d68888289016138a7565b9350506060613d79888289016138a7565b9250506080613d8a888289016138a7565b9150509295509295909350565b600060208284031215613dad57613dac613854565b5b6000613dbb848285016138dd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dfe578082015181840152602081019050613de3565b83811115613e0d576000848401525b50505050565b6000613e1e82613dc4565b613e288185613dcf565b9350613e38818560208601613de0565b613e4181613a21565b840191505092915050565b60006020820190508181036000830152613e668184613e13565b905092915050565b600060208284031215613e8457613e83613854565b5b6000613e92848285016138a7565b91505092915050565b600067ffffffffffffffff821115613eb657613eb5613a32565b5b602082029050602081019050919050565b600080fd5b6000613edf613eda84613e9b565b613a92565b90508083825260208201905060208402830185811115613f0257613f01613ec7565b5b835b81811015613f2b5780613f1788826138dd565b845260208401935050602081019050613f04565b5050509392505050565b600082601f830112613f4a57613f49613a17565b5b8135613f5a848260208601613ecc565b91505092915050565b600080600080600060a08688031215613f7f57613f7e613854565b5b6000613f8d888289016138a7565b9550506020613f9e888289016138a7565b945050604086013567ffffffffffffffff811115613fbf57613fbe613859565b5b613fcb88828901613f35565b935050606086013567ffffffffffffffff811115613fec57613feb613859565b5b613ff888828901613f35565b925050608086013567ffffffffffffffff81111561401957614018613859565b5b61402588828901613bd0565b9150509295509295909350565b61403b8161387e565b82525050565b60006020820190506140566000830184614032565b92915050565b600067ffffffffffffffff82111561407757614076613a32565b5b602082029050602081019050919050565b600061409b6140968461405c565b613a92565b905080838252602082019050602084028301858111156140be576140bd613ec7565b5b835b818110156140e757806140d388826138a7565b8452602084019350506020810190506140c0565b5050509392505050565b600082601f83011261410657614105613a17565b5b8135614116848260208601614088565b91505092915050565b6000806040838503121561413657614135613854565b5b600083013567ffffffffffffffff81111561415457614153613859565b5b614160858286016140f1565b925050602083013567ffffffffffffffff81111561418157614180613859565b5b61418d85828601613f35565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6141cc816138bc565b82525050565b60006141de83836141c3565b60208301905092915050565b6000602082019050919050565b600061420282614197565b61420c81856141a2565b9350614217836141b3565b8060005b8381101561424857815161422f88826141d2565b975061423a836141ea565b92505060018101905061421b565b5085935050505092915050565b6000602082019050818103600083015261426f81846141f7565b905092915050565b600080fd5b60006142878261385e565b9050919050565b6142978161427c565b81146142a257600080fd5b50565b6000813590506142b48161428e565b92915050565b600061012082840312156142d1576142d0614277565b5b6142dc610120613a92565b905060006142ec848285016138dd565b6000830152506020614300848285016138dd565b6020830152506040614314848285016138dd565b6040830152506060614328848285016138dd565b606083015250608061433c848285016138dd565b60808301525060a0614350848285016138dd565b60a08301525060c0614364848285016138dd565b60c08301525060e0614378848285016142a5565b60e08301525061010061438d848285016138dd565b6101008301525092915050565b600061012082840312156143b1576143b0613854565b5b60006143bf848285016142ba565b91505092915050565b6143d18161427c565b82525050565b610120820160008201516143ee60008501826141c3565b50602082015161440160208501826141c3565b50604082015161441460408501826141c3565b50606082015161442760608501826141c3565b50608082015161443a60808501826141c3565b5060a082015161444d60a08501826141c3565b5060c082015161446060c08501826141c3565b5060e082015161447360e08501826143c8565b506101008201516144886101008501826141c3565b50505050565b6000610120820190506144a460008301846143d7565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144df8161387e565b82525050565b60006144f183836144d6565b60208301905092915050565b6000602082019050919050565b6000614515826144aa565b61451f81856144b5565b935061452a836144c6565b8060005b8381101561455b57815161454288826144e5565b975061454d836144fd565b92505060018101905061452e565b5085935050505092915050565b60006020820190508181036000830152614582818461450a565b905092915050565b614593816139e1565b811461459e57600080fd5b50565b6000813590506145b08161458a565b92915050565b600080604083850312156145cd576145cc613854565b5b60006145db858286016138a7565b92505060206145ec858286016145a1565b9150509250929050565b600080600080600060a0868803121561461257614611613854565b5b6000614620888289016138dd565b9550506020614631888289016138dd565b9450506040614642888289016138dd565b9350506060614653888289016138dd565b9250506080614664888289016138dd565b9150509295509295909350565b6000806040838503121561468857614687613854565b5b6000614696858286016138a7565b92505060206146a7858286016138a7565b9150509250929050565b600080600080600060a086880312156146cd576146cc613854565b5b60006146db888289016138a7565b95505060206146ec888289016138a7565b94505060406146fd888289016138dd565b935050606061470e888289016138dd565b925050608086013567ffffffffffffffff81111561472f5761472e613859565b5b61473b88828901613bd0565b9150509295509295909350565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b600061477e600283613dcf565b915061478982614748565b602082019050919050565b600060208201905081810360008301526147ad81614771565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147ee826138bc565b91506147f9836138bc565b92508282101561480c5761480b6147b4565b5b828203905092915050565b7f4953000000000000000000000000000000000000000000000000000000000000600082015250565b600061484d600283613dcf565b915061485882614817565b602082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148b9600283613dcf565b91506148c482614883565b602082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000614925600383613dcf565b9150614930826148ef565b602082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b600081905092915050565b600061497182613dc4565b61497b818561495b565b935061498b818560208601613de0565b80840191505092915050565b6000819050919050565b6149b26149ad826138bc565b614997565b82525050565b60008160601b9050919050565b60006149d0826149b8565b9050919050565b60006149e2826149c5565b9050919050565b6149fa6149f58261387e565b6149d7565b82525050565b6000614a0c828d614966565b9150614a18828c6149a1565b602082019150614a28828b6149a1565b602082019150614a38828a6149a1565b602082019150614a4882896149a1565b602082019150614a5882886149a1565b602082019150614a6882876149a1565b602082019150614a7882866149a1565b602082019150614a8882856149e9565b601482019150614a9882846149a1565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ae6600283613dcf565b9150614af182614ab0565b602082019050919050565b60006020820190508181036000830152614b1581614ad9565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b52600283613dcf565b9150614b5d82614b1c565b602082019050919050565b60006020820190508181036000830152614b8181614b45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bcf57607f821691505b60208210811415614be357614be2614b88565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c1f601d83613dcf565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b60008190508160005260206000209050919050565b60008154614c7781614bb7565b614c81818661495b565b94506001821660008114614c9c5760018114614cad57614ce0565b60ff19831686528186019350614ce0565b614cb685614c55565b60005b83811015614cd857815481890152600182019150602081019050614cb9565b838801955050505b50505092915050565b6000614cf58285614c6a565b9150614d018284614966565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d69602983613dcf565b9150614d7482614d0d565b604082019050919050565b60006020820190508181036000830152614d9881614d5c565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614dfb602983613dcf565b9150614e0682614d9f565b604082019050919050565b60006020820190508181036000830152614e2a81614dee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ebc603183613dcf565b9150614ec782614e60565b604082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000614f28600383613dcf565b9150614f3382614ef2565b602082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f94600283613dcf565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000615000600383613dcf565b915061500b82614fca565b602082019050919050565b6000602082019050818103600083015261502f81614ff3565b9050919050565b6000615041826138bc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615074576150736147b4565b5b600182019050919050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006150b5600283613dcf565b91506150c08261507f565b602082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b60006150f6826138bc565b9150615101836138bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615136576151356147b4565b5b828201905092915050565b600061514c826138bc565b9150615157836138bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151905761518f6147b4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151d5826138bc565b91506151e0836138bc565b9250826151f0576151ef61519b565b5b828204905092915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615257602983613dcf565b9150615262826151fb565b604082019050919050565b600060208201905081810360008301526152868161524a565b9050919050565b6000615298826138bc565b91506152a3836138bc565b9250826152b3576152b261519b565b5b828206905092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061531a602b83613dcf565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000615386601c8361495b565b915061539182615350565b601c82019050919050565b6000819050919050565b6000819050919050565b6153c16153bc8261539c565b6153a6565b82525050565b60006153d282615379565b91506153de82846153b0565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615452601883613dcf565b915061545d8261541c565b602082019050919050565b6000602082019050818103600083015261548181615445565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006154be601f83613dcf565b91506154c982615488565b602082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615550602283613dcf565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602283613dcf565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061563f82615618565b6156498185615623565b9350615659818560208601613de0565b61566281613a21565b840191505092915050565b600060a0820190506156826000830188614032565b61568f6020830187614032565b81810360408301526156a181866141f7565b905081810360608301526156b581856141f7565b905081810360808301526156c98184615634565b90509695505050505050565b6000815190506156e481613988565b92915050565b600060208284031215615700576156ff613854565b5b600061570e848285016156d5565b91505092915050565b60008160e01c9050919050565b600060033d11156157435760046000803e615740600051615717565b90505b90565b600060443d1015615756576157d9565b61575e61384a565b60043d036004823e80513d602482011167ffffffffffffffff821117156157865750506157d9565b808201805167ffffffffffffffff8111156157a457505050506157d9565b80602083010160043d0385018111156157c15750505050506157d9565b6157d082602001850186613a61565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615838603483613dcf565b9150615843826157dc565b604082019050919050565b600060208201905081810360008301526158678161582b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006158ca602883613dcf565b91506158d58261586e565b604082019050919050565b600060208201905081810360008301526158f9816158bd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061595c602583613dcf565b915061596782615900565b604082019050919050565b6000602082019050818103600083015261598b8161594f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006159ee602883613dcf565b91506159f982615992565b604082019050919050565b60006020820190508181036000830152615a1d816159e1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615a80602b83613dcf565b9150615a8b82615a24565b604082019050919050565b60006020820190508181036000830152615aaf81615a73565b9050919050565b60006040820190508181036000830152615ad081856141f7565b90508181036020830152615ae481846141f7565b90509392505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b49602283613dcf565b9150615b5482615aed565b604082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b600060a082019050615b946000830188614032565b615ba16020830187614032565b615bae6040830186613932565b615bbb6060830185613932565b8181036080830152615bcd8184615634565b90509695505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c35602183613dcf565b9150615c4082615bd9565b604082019050919050565b60006020820190508181036000830152615c6481615c28565b9050919050565b6000604082019050615c806000830185613932565b615c8d6020830184613932565b9392505050565b615c9d8161539c565b82525050565b600060ff82169050919050565b615cb981615ca3565b82525050565b6000608082019050615cd46000830187615c94565b615ce16020830186615cb0565b615cee6040830185615c94565b615cfb6060830184615c94565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220ebcf705eb1fb82ddb309465625f1ee1ea38672c8376054cd0ea8e04b1288fcaa64736f6c63430008090033' type CyberDestinationUtilityFactoryFacetConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts b/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts index 6cfd0b7..7a3a434 100644 --- a/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts @@ -416,7 +416,7 @@ const _abi = [ type: 'tuple', }, ], - name: 'getMintPrice', + name: 'getMintPriceForDrop', outputs: [ { internalType: 'uint256', @@ -820,7 +820,7 @@ const _abi = [ ] const _bytecode = - '0x608060405234801561001057600080fd5b50615d6980620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063ab12881a1161006f578063ab12881a1461052c578063bc01188e14610569578063bd85b03914610594578063d61b0c82146105d1578063e985e9c51461060e578063f242432a1461064b5761014a565b80635c5ed16d146103df5780636787d4491461041c5780636dcfd8411461045957806385bff2e714610496578063a0712d68146104d3578063a22cb465146105035761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b50610176600480360381019061017191906138f2565b610674565b6040516101839190613941565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae91906139b4565b610688565b6040516101c091906139fc565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613bfe565b6106ab565b6040516101fd9190613941565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613d00565b610abb565b005b34801561023b57600080fd5b5061025660048036038101906102519190613d97565b610d1f565b6040516102639190613e4c565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613d97565b610e43565b6040516102a09190613941565b60405180910390f35b3480156102b557600080fd5b506102be610e70565b6040516102cb9190613941565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613e6e565b610e8a565b6040516103089190613941565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613f63565b610ee3565b005b34801561034657600080fd5b5061034f610f77565b60405161035c9190614041565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061411f565b610faa565b6040516103999190614255565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613e6e565b61119f565b6040516103d691906139fc565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613d97565b611202565b6040516104139190613941565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613d97565b611393565b604051610450919061434f565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613d97565b6114be565b60405161048d9190614429565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613e6e565b6115c6565b6040516104ca9190614255565b60405180910390f35b6104ed60048036038101906104e89190613d97565b6116cc565b6040516104fa91906139fc565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190614477565b611a41565b005b34801561053857600080fd5b50610553600480360381019061054e91906145c8565b611bb6565b6040516105609190613941565b60405180910390f35b34801561057557600080fd5b5061057e611c05565b60405161058b9190614041565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190613d97565b611c38565b6040516105c89190613941565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f391906145f6565b611c5e565b6040516106059190613941565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190614671565b611ccf565b60405161064291906139fc565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906146b1565b611d6c565b005b60006106808383611e00565b905092915050565b60006106a482610696611ed3565b611f0090919063ffffffff16565b9050919050565b60008888116106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690614794565b60405180910390fd5b8489896106fc91906147e3565b1161073c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073390614863565b60405180910390fd5b85871161077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906148cf565b60405180910390fd5b60648311156107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b99061493b565b60405180910390fd5b60006107cc611f6b565b905060006107d982610e8a565b905060008c8c8c8c8c8c8c8c8a8a6040516020016108009a99989796959493929190614a00565b60405160208183030381529060405290506000610835866108278480519060200120611fa7565b611fd790919063ffffffff16565b905061083f611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790614afc565b60405180910390fd5b6108e36108db611ffe565b60020161202b565b94506108ef858f612039565b6109026108fa611ffe565b60020161206e565b61095261090d611ffe565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061206e565b60006040518061012001604052808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018673ffffffffffffffffffffffffffffffffffffffff16815260200160008152509050806109b6612084565b6000016000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080155905050858573ffffffffffffffffffffffffffffffffffffffff167f889de1a576ddf6ed9570e1a2354ffe87302c20bd8af57b5bd4e3bbc84240e7f660405160405180910390a350505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610ada6120b1565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90614b68565b60405180910390fd5b82610b5d6120de565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610ba86120b1565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610c3a8561210b565b83610c43611ffe565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610c8d611ffe565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610cd7611ffe565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610d2b61212e565b60000160008481526020019081526020016000208054610d4a90614bb7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7690614bb7565b8015610dc35780601f10610d9857610100808354040283529160200191610dc3565b820191906000526020600020905b815481529060010190602001808311610da657829003601f168201915b50505050509050600081511415610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690614c35565b60405180910390fd5b610e1761212e565b60010181604051602001610e2c929190614ce9565b604051602081830303815290604052915050919050565b6000610e69610e5061215b565b6001016000848152602001908152602001600020612188565b9050919050565b6000610e85610e7d611ffe565b60020161202b565b905090565b6000610edc610e97611ffe565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061202b565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f235750610f228533611ccf565b5b610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990614d7f565b60405180910390fd5b610f7033868686868661219d565b5050505050565b6000610f81611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790614e11565b60405180910390fd5b6000610ffa6121c1565b60000190506000845167ffffffffffffffff81111561101c5761101b613a32565b5b60405190808252806020026020018201604052801561104a5781602001602082028036833780820191505090505b50905060005b855181101561119357600073ffffffffffffffffffffffffffffffffffffffff1686828151811061108457611083614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614ed2565b60405180910390fd5b8260008683815181106110f9576110f8614e31565b5b60200260200101518152602001908152602001600020600087838151811061112457611123614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061117a57611179614e31565b5b6020026020010181815250508080600101915050611050565b50809250505092915050565b60006111a96120de565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008061120d612084565b6000016000848152602001908152602001600020905080600001544211801561123a575080600101544211155b611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614f3e565b60405180910390fd5b60008160050154146112d05780600501548160080154106112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690614faa565b60405180910390fd5b5b61138b8160405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611bb6565b915050919050565b61139b613745565b60006113a5612084565b600001600084815260200190815260200160002060405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160088201548152505090506000816000015114156114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90615016565b60405180910390fd5b80915050919050565b606060006114ca61215b565b6001016000848152602001908152602001600020905060006114eb82612188565b67ffffffffffffffff81111561150457611503613a32565b5b6040519080825280602002602001820160405280156115325781602001602082028036833780820191505090505b50905060005b61154183612188565b8110156115bb5761155b81846121ee90919063ffffffff16565b82828151811061156e5761156d614e31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806115b390615036565b915050611538565b508092505050919050565b606060006115d261215b565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061161f82612208565b67ffffffffffffffff81111561163857611637613a32565b5b6040519080825280602002602001820160405280156116665781602001602082028036833780820191505090505b50905060005b61167583612208565b8110156116c15761168f818461221d90919063ffffffff16565b8282815181106116a2576116a1614e31565b5b60200260200101818152505080806116b990615036565b91505061166c565b508092505050919050565b6000806116d7611f6b565b905060006116e3612084565b60000160008581526020019081526020016000209050806000015442118015611710575080600101544211155b61174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690614f3e565b60405180910390fd5b60008160050154146117a65780600501548160080154106117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90614faa565b60405180910390fd5b5b60006118638260405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611bb6565b9050803410156118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f906150cb565b60405180910390fd5b6118c48386600160405180602001604052806000815250612237565b60018260080160008282546118d991906150eb565b925050819055506001858473ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a46000606483600601543461193a9190615141565b61194491906151ca565b90506000813461195491906147e3565b90508360070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156119c0573d6000803e3d6000fd5b506119c9611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611a32573d6000803e3d6000fd5b50600195505050505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa79061526d565b60405180910390fd5b80611ab96121c1565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611baa91906139fc565b60405180910390a35050565b600080826000015142611bc991906147e3565b9050600083600001518460200151611be191906147e3565b9050611bfc8282866040015187606001518860800151611c5e565b92505050919050565b6000611c0f611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611c4261215b565b6000016000838152602001908152602001600020549050919050565b6000848385611c6d91906147e3565b87611c789190615141565b8486611c8491906147e3565b8489611c90919061528d565b611c9a9190615141565b8688611ca69190615141565b611cb091906150eb565b611cba91906147e3565b611cc491906151ca565b905095945050505050565b6000611cd96121c1565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611dac5750611dab8533611ccf565b5b611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de290614d7f565b60405180910390fd5b611df9338686868686612258565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890615330565b60405180910390fd5b611e796121c1565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006018600036905010158015611f875750611f863361119f565b5b15611f9b57601436033560601c9050611fa3565b339050611fa4565b5b90565b600081604051602001611fba91906153c7565b604051602081830303815290604052805190602001209050919050565b6000806000611fe6858561227c565b91509150611ff3816122ff565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061204261212e565b600001600084815260200190815260200160002090805190602001906120699291906137a7565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061211461212e565b600101908051906020019061212a9291906137a7565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000612196826000016124d4565b9050919050565b6121ab8686868686866124e5565b6121b98686868686866126cc565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b60006121fd83600001836129d8565b60001c905092915050565b6000612216826000016124d4565b9050919050565b600061222c83600001836129d8565b60001c905092915050565b61224633600086868686612a4c565b61225284848484612c33565b50505050565b612266868686868686612a4c565b612274868686868686612dbd565b505050505050565b6000806041835114156122be5760008060006020860151925060408601519150606086015160001a90506122b287828585613035565b945094505050506122f8565b6040835114156122ef5760008060208501519150604085015190506122e4868383613142565b9350935050506122f8565b60006002915091505b9250929050565b60006004811115612313576123126153ed565b5b816004811115612326576123256153ed565b5b1415612331576124d1565b60016004811115612345576123446153ed565b5b816004811115612358576123576153ed565b5b1415612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090615468565b60405180910390fd5b600260048111156123ad576123ac6153ed565b5b8160048111156123c0576123bf6153ed565b5b1415612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f8906154d4565b60405180910390fd5b60036004811115612415576124146153ed565b5b816004811115612428576124276153ed565b5b1415612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246090615566565b60405180910390fd5b60048081111561247c5761247b6153ed565b5b81600481111561248f5761248e6153ed565b5b14156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c7906155f8565b60405180910390fd5b5b50565b600081600001805490509050919050565b6125048473ffffffffffffffffffffffffffffffffffffffff16613190565b156126c4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161254a95949392919061566d565b602060405180830381600087803b15801561256457600080fd5b505af192505050801561259557506040513d601f19601f8201168201806040525081019061259291906156ea565b60015b61263b576125a1615724565b806308c379a014156125fe57506125b6615746565b806125c15750612600565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f59190613e4c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126329061584e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b9906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615972565b60405180910390fd5b8151835114612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790615a04565b60405180910390fd5b61278e8686868686866131a3565b60006127986121c1565b600001905060005b84518110156129505760008582815181106127be576127bd614e31565b5b6020026020010151905060008583815181106127dd576127dc614e31565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590615a96565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461293491906150eb565b925050819055505050808061294890615036565b9150506127a0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129c7929190615ab6565b60405180910390a450505050505050565b600081836000018054905011612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90615b5f565b60405180910390fd5b826000018281548110612a3957612a38614e31565b5b9060005260206000200154905092915050565b612a6b8473ffffffffffffffffffffffffffffffffffffffff16613190565b15612c2b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ab1959493929190615b7f565b602060405180830381600087803b158015612acb57600080fd5b505af1925050508015612afc57506040513d601f19601f82011682018060405250810190612af991906156ea565b60015b612ba257612b08615724565b806308c379a01415612b655750612b1d615746565b80612b285750612b67565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c9190613e4c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b999061584e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c20906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90615c4b565b60405180910390fd5b612cc233600086612cb3876131b9565b612cbc876131b9565b866131a3565b6000612ccc6121c1565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3091906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612dae929190615c6b565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2490615972565b60405180910390fd5b612e4b868686612e3c876131b9565b612e45876131b9565b866131a3565b6000612e556121c1565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee890615a96565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fa791906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051613024929190615c6b565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613070576000600391509150613139565b601b8560ff16141580156130885750601c8560ff1614155b1561309a576000600491509150613139565b6000600187878787604051600081526020016040526040516130bf9493929190615cbf565b6020604051602081039080840390855afa1580156130e1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561313057600060019250925050613139565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061318287828885613035565b935093505050935093915050565b600080823b905060008111915050919050565b6131b1868686868686613233565b505050505050565b60606000600167ffffffffffffffff8111156131d8576131d7613a32565b5b6040519080825280602002602001820160405280156132065781602001602082028036833780820191505090505b509050828160008151811061321e5761321d614e31565b5b60200260200101818152505080915050919050565b613241868686868686613249565b505050505050565b613257868686868686613504565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146134fc57600061329461215b565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156134f657600087828151811061334957613348614e31565b5b6020026020010151905060008111156134e257600089838151811061337157613370614e31565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156133e1578187600001600083815260200190815260200160002060008282546133d591906150eb565b9250508190555061342d565b816133ec8d83611e00565b141561342c576134168c87600084815260200190815260200160002061350c90919063ffffffff16565b5061342a818661353c90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156134935781876000016000838152602001908152602001600020600082825461348791906147e3565b925050819055506134e0565b600061349f8c83611e00565b14156134df576134c98b87600084815260200190815260200160002061355690919063ffffffff16565b506134dd818561358690919063ffffffff16565b505b5b505b5080806134ee90615036565b91505061332b565b50505050505b505050505050565b505050505050565b6000613534836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6135a0565b905092915050565b600061354e836000018360001b6135a0565b905092915050565b600061357e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6136b2565b905092915050565b6000613598836000018360001b6136b2565b905092915050565b600080836001016000848152602001908152602001600020549050600081146136a65760006001826135d291906147e3565b9050600085600001600187600001805490506135ee91906147e3565b815481106135ff576135fe614e31565b5b906000526020600020015490508086600001838154811061362357613622614e31565b5b906000526020600020018190555060018261363e91906150eb565b866001016000838152602001908152602001600020819055508560000180548061366b5761366a615d04565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506136ac565b60009150505b92915050565b60006136be8383613722565b61371757826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061371c565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b8280546137b390614bb7565b90600052602060002090601f0160209004810192826137d5576000855561381c565b82601f106137ee57805160ff191683800117855561381c565b8280016001018555821561381c579182015b8281111561381b578251825591602001919060010190613800565b5b509050613829919061382d565b5090565b5b8082111561384657600081600090555060010161382e565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138898261385e565b9050919050565b6138998161387e565b81146138a457600080fd5b50565b6000813590506138b681613890565b92915050565b6000819050919050565b6138cf816138bc565b81146138da57600080fd5b50565b6000813590506138ec816138c6565b92915050565b6000806040838503121561390957613908613854565b5b6000613917858286016138a7565b9250506020613928858286016138dd565b9150509250929050565b61393b816138bc565b82525050565b60006020820190506139566000830184613932565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139918161395c565b811461399c57600080fd5b50565b6000813590506139ae81613988565b92915050565b6000602082840312156139ca576139c9613854565b5b60006139d88482850161399f565b91505092915050565b60008115159050919050565b6139f6816139e1565b82525050565b6000602082019050613a1160008301846139ed565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a6a82613a21565b810181811067ffffffffffffffff82111715613a8957613a88613a32565b5b80604052505050565b6000613a9c61384a565b9050613aa88282613a61565b919050565b600067ffffffffffffffff821115613ac857613ac7613a32565b5b613ad182613a21565b9050602081019050919050565b82818337600083830152505050565b6000613b00613afb84613aad565b613a92565b905082815260208101848484011115613b1c57613b1b613a1c565b5b613b27848285613ade565b509392505050565b600082601f830112613b4457613b43613a17565b5b8135613b54848260208601613aed565b91505092915050565b600067ffffffffffffffff821115613b7857613b77613a32565b5b613b8182613a21565b9050602081019050919050565b6000613ba1613b9c84613b5d565b613a92565b905082815260208101848484011115613bbd57613bbc613a1c565b5b613bc8848285613ade565b509392505050565b600082601f830112613be557613be4613a17565b5b8135613bf5848260208601613b8e565b91505092915050565b60008060008060008060008060006101208a8c031215613c2157613c20613854565b5b60008a013567ffffffffffffffff811115613c3f57613c3e613859565b5b613c4b8c828d01613b2f565b9950506020613c5c8c828d016138dd565b9850506040613c6d8c828d016138dd565b9750506060613c7e8c828d016138dd565b9650506080613c8f8c828d016138dd565b95505060a0613ca08c828d016138dd565b94505060c0613cb18c828d016138dd565b93505060e0613cc28c828d016138dd565b9250506101008a013567ffffffffffffffff811115613ce457613ce3613859565b5b613cf08c828d01613bd0565b9150509295985092959850929598565b600080600080600060a08688031215613d1c57613d1b613854565b5b600086013567ffffffffffffffff811115613d3a57613d39613859565b5b613d4688828901613b2f565b9550506020613d57888289016138a7565b9450506040613d68888289016138a7565b9350506060613d79888289016138a7565b9250506080613d8a888289016138a7565b9150509295509295909350565b600060208284031215613dad57613dac613854565b5b6000613dbb848285016138dd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dfe578082015181840152602081019050613de3565b83811115613e0d576000848401525b50505050565b6000613e1e82613dc4565b613e288185613dcf565b9350613e38818560208601613de0565b613e4181613a21565b840191505092915050565b60006020820190508181036000830152613e668184613e13565b905092915050565b600060208284031215613e8457613e83613854565b5b6000613e92848285016138a7565b91505092915050565b600067ffffffffffffffff821115613eb657613eb5613a32565b5b602082029050602081019050919050565b600080fd5b6000613edf613eda84613e9b565b613a92565b90508083825260208201905060208402830185811115613f0257613f01613ec7565b5b835b81811015613f2b5780613f1788826138dd565b845260208401935050602081019050613f04565b5050509392505050565b600082601f830112613f4a57613f49613a17565b5b8135613f5a848260208601613ecc565b91505092915050565b600080600080600060a08688031215613f7f57613f7e613854565b5b6000613f8d888289016138a7565b9550506020613f9e888289016138a7565b945050604086013567ffffffffffffffff811115613fbf57613fbe613859565b5b613fcb88828901613f35565b935050606086013567ffffffffffffffff811115613fec57613feb613859565b5b613ff888828901613f35565b925050608086013567ffffffffffffffff81111561401957614018613859565b5b61402588828901613bd0565b9150509295509295909350565b61403b8161387e565b82525050565b60006020820190506140566000830184614032565b92915050565b600067ffffffffffffffff82111561407757614076613a32565b5b602082029050602081019050919050565b600061409b6140968461405c565b613a92565b905080838252602082019050602084028301858111156140be576140bd613ec7565b5b835b818110156140e757806140d388826138a7565b8452602084019350506020810190506140c0565b5050509392505050565b600082601f83011261410657614105613a17565b5b8135614116848260208601614088565b91505092915050565b6000806040838503121561413657614135613854565b5b600083013567ffffffffffffffff81111561415457614153613859565b5b614160858286016140f1565b925050602083013567ffffffffffffffff81111561418157614180613859565b5b61418d85828601613f35565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6141cc816138bc565b82525050565b60006141de83836141c3565b60208301905092915050565b6000602082019050919050565b600061420282614197565b61420c81856141a2565b9350614217836141b3565b8060005b8381101561424857815161422f88826141d2565b975061423a836141ea565b92505060018101905061421b565b5085935050505092915050565b6000602082019050818103600083015261426f81846141f7565b905092915050565b60006142828261385e565b9050919050565b61429281614277565b82525050565b610120820160008201516142af60008501826141c3565b5060208201516142c260208501826141c3565b5060408201516142d560408501826141c3565b5060608201516142e860608501826141c3565b5060808201516142fb60808501826141c3565b5060a082015161430e60a08501826141c3565b5060c082015161432160c08501826141c3565b5060e082015161433460e0850182614289565b506101008201516143496101008501826141c3565b50505050565b6000610120820190506143656000830184614298565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143a08161387e565b82525050565b60006143b28383614397565b60208301905092915050565b6000602082019050919050565b60006143d68261436b565b6143e08185614376565b93506143eb83614387565b8060005b8381101561441c57815161440388826143a6565b975061440e836143be565b9250506001810190506143ef565b5085935050505092915050565b6000602082019050818103600083015261444381846143cb565b905092915050565b614454816139e1565b811461445f57600080fd5b50565b6000813590506144718161444b565b92915050565b6000806040838503121561448e5761448d613854565b5b600061449c858286016138a7565b92505060206144ad85828601614462565b9150509250929050565b600080fd5b6144c581614277565b81146144d057600080fd5b50565b6000813590506144e2816144bc565b92915050565b600061012082840312156144ff576144fe6144b7565b5b61450a610120613a92565b9050600061451a848285016138dd565b600083015250602061452e848285016138dd565b6020830152506040614542848285016138dd565b6040830152506060614556848285016138dd565b606083015250608061456a848285016138dd565b60808301525060a061457e848285016138dd565b60a08301525060c0614592848285016138dd565b60c08301525060e06145a6848285016144d3565b60e0830152506101006145bb848285016138dd565b6101008301525092915050565b600061012082840312156145df576145de613854565b5b60006145ed848285016144e8565b91505092915050565b600080600080600060a0868803121561461257614611613854565b5b6000614620888289016138dd565b9550506020614631888289016138dd565b9450506040614642888289016138dd565b9350506060614653888289016138dd565b9250506080614664888289016138dd565b9150509295509295909350565b6000806040838503121561468857614687613854565b5b6000614696858286016138a7565b92505060206146a7858286016138a7565b9150509250929050565b600080600080600060a086880312156146cd576146cc613854565b5b60006146db888289016138a7565b95505060206146ec888289016138a7565b94505060406146fd888289016138dd565b935050606061470e888289016138dd565b925050608086013567ffffffffffffffff81111561472f5761472e613859565b5b61473b88828901613bd0565b9150509295509295909350565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b600061477e600283613dcf565b915061478982614748565b602082019050919050565b600060208201905081810360008301526147ad81614771565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147ee826138bc565b91506147f9836138bc565b92508282101561480c5761480b6147b4565b5b828203905092915050565b7f4953000000000000000000000000000000000000000000000000000000000000600082015250565b600061484d600283613dcf565b915061485882614817565b602082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148b9600283613dcf565b91506148c482614883565b602082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000614925600383613dcf565b9150614930826148ef565b602082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b600081905092915050565b600061497182613dc4565b61497b818561495b565b935061498b818560208601613de0565b80840191505092915050565b6000819050919050565b6149b26149ad826138bc565b614997565b82525050565b60008160601b9050919050565b60006149d0826149b8565b9050919050565b60006149e2826149c5565b9050919050565b6149fa6149f58261387e565b6149d7565b82525050565b6000614a0c828d614966565b9150614a18828c6149a1565b602082019150614a28828b6149a1565b602082019150614a38828a6149a1565b602082019150614a4882896149a1565b602082019150614a5882886149a1565b602082019150614a6882876149a1565b602082019150614a7882866149a1565b602082019150614a8882856149e9565b601482019150614a9882846149a1565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ae6600283613dcf565b9150614af182614ab0565b602082019050919050565b60006020820190508181036000830152614b1581614ad9565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b52600283613dcf565b9150614b5d82614b1c565b602082019050919050565b60006020820190508181036000830152614b8181614b45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bcf57607f821691505b60208210811415614be357614be2614b88565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c1f601d83613dcf565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b60008190508160005260206000209050919050565b60008154614c7781614bb7565b614c81818661495b565b94506001821660008114614c9c5760018114614cad57614ce0565b60ff19831686528186019350614ce0565b614cb685614c55565b60005b83811015614cd857815481890152600182019150602081019050614cb9565b838801955050505b50505092915050565b6000614cf58285614c6a565b9150614d018284614966565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d69602983613dcf565b9150614d7482614d0d565b604082019050919050565b60006020820190508181036000830152614d9881614d5c565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614dfb602983613dcf565b9150614e0682614d9f565b604082019050919050565b60006020820190508181036000830152614e2a81614dee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ebc603183613dcf565b9150614ec782614e60565b604082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000614f28600383613dcf565b9150614f3382614ef2565b602082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f94600283613dcf565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000615000600383613dcf565b915061500b82614fca565b602082019050919050565b6000602082019050818103600083015261502f81614ff3565b9050919050565b6000615041826138bc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615074576150736147b4565b5b600182019050919050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006150b5600283613dcf565b91506150c08261507f565b602082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b60006150f6826138bc565b9150615101836138bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615136576151356147b4565b5b828201905092915050565b600061514c826138bc565b9150615157836138bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151905761518f6147b4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151d5826138bc565b91506151e0836138bc565b9250826151f0576151ef61519b565b5b828204905092915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615257602983613dcf565b9150615262826151fb565b604082019050919050565b600060208201905081810360008301526152868161524a565b9050919050565b6000615298826138bc565b91506152a3836138bc565b9250826152b3576152b261519b565b5b828206905092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061531a602b83613dcf565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000615386601c8361495b565b915061539182615350565b601c82019050919050565b6000819050919050565b6000819050919050565b6153c16153bc8261539c565b6153a6565b82525050565b60006153d282615379565b91506153de82846153b0565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615452601883613dcf565b915061545d8261541c565b602082019050919050565b6000602082019050818103600083015261548181615445565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006154be601f83613dcf565b91506154c982615488565b602082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615550602283613dcf565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602283613dcf565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061563f82615618565b6156498185615623565b9350615659818560208601613de0565b61566281613a21565b840191505092915050565b600060a0820190506156826000830188614032565b61568f6020830187614032565b81810360408301526156a181866141f7565b905081810360608301526156b581856141f7565b905081810360808301526156c98184615634565b90509695505050505050565b6000815190506156e481613988565b92915050565b600060208284031215615700576156ff613854565b5b600061570e848285016156d5565b91505092915050565b60008160e01c9050919050565b600060033d11156157435760046000803e615740600051615717565b90505b90565b600060443d1015615756576157d9565b61575e61384a565b60043d036004823e80513d602482011167ffffffffffffffff821117156157865750506157d9565b808201805167ffffffffffffffff8111156157a457505050506157d9565b80602083010160043d0385018111156157c15750505050506157d9565b6157d082602001850186613a61565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615838603483613dcf565b9150615843826157dc565b604082019050919050565b600060208201905081810360008301526158678161582b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006158ca602883613dcf565b91506158d58261586e565b604082019050919050565b600060208201905081810360008301526158f9816158bd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061595c602583613dcf565b915061596782615900565b604082019050919050565b6000602082019050818103600083015261598b8161594f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006159ee602883613dcf565b91506159f982615992565b604082019050919050565b60006020820190508181036000830152615a1d816159e1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615a80602b83613dcf565b9150615a8b82615a24565b604082019050919050565b60006020820190508181036000830152615aaf81615a73565b9050919050565b60006040820190508181036000830152615ad081856141f7565b90508181036020830152615ae481846141f7565b90509392505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b49602283613dcf565b9150615b5482615aed565b604082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b600060a082019050615b946000830188614032565b615ba16020830187614032565b615bae6040830186613932565b615bbb6060830185613932565b8181036080830152615bcd8184615634565b90509695505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c35602183613dcf565b9150615c4082615bd9565b604082019050919050565b60006020820190508181036000830152615c6481615c28565b9050919050565b6000604082019050615c806000830185613932565b615c8d6020830184613932565b9392505050565b615c9d8161539c565b82525050565b600060ff82169050919050565b615cb981615ca3565b82525050565b6000608082019050615cd46000830187615c94565b615ce16020830186615cb0565b615cee6040830185615c94565b615cfb6060830184615c94565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212202a5f555fe432e4c5f71fc4bace14165f39f727fd886437567ab9617248f7648364736f6c63430008090033' + '0x608060405234801561001057600080fd5b50615d6980620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063a22cb4651161006f578063a22cb46514610540578063bc01188e14610569578063bd85b03914610594578063d61b0c82146105d1578063e985e9c51461060e578063f242432a1461064b5761014a565b80635c5ed16d146103df5780635e28bc541461041c5780636787d449146104595780636dcfd8411461049657806385bff2e7146104d3578063a0712d68146105105761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b50610176600480360381019061017191906138f2565b610674565b6040516101839190613941565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae91906139b4565b610688565b6040516101c091906139fc565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613bfe565b6106ab565b6040516101fd9190613941565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613d00565b610abb565b005b34801561023b57600080fd5b5061025660048036038101906102519190613d97565b610d1f565b6040516102639190613e4c565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613d97565b610e43565b6040516102a09190613941565b60405180910390f35b3480156102b557600080fd5b506102be610e70565b6040516102cb9190613941565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613e6e565b610e8a565b6040516103089190613941565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613f63565b610ee3565b005b34801561034657600080fd5b5061034f610f77565b60405161035c9190614041565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061411f565b610faa565b6040516103999190614255565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613e6e565b61119f565b6040516103d691906139fc565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613d97565b611202565b6040516104139190613941565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e919061439a565b611393565b6040516104509190613941565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613d97565b6113e2565b60405161048d919061448e565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613d97565b61150d565b6040516104ca9190614568565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613e6e565b611615565b6040516105079190614255565b60405180910390f35b61052a60048036038101906105259190613d97565b61171b565b60405161053791906139fc565b60405180910390f35b34801561054c57600080fd5b50610567600480360381019061056291906145b6565b611a90565b005b34801561057557600080fd5b5061057e611c05565b60405161058b9190614041565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190613d97565b611c38565b6040516105c89190613941565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f391906145f6565b611c5e565b6040516106059190613941565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190614671565b611ccf565b60405161064291906139fc565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906146b1565b611d6c565b005b60006106808383611e00565b905092915050565b60006106a482610696611ed3565b611f0090919063ffffffff16565b9050919050565b60008888116106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690614794565b60405180910390fd5b8489896106fc91906147e3565b1161073c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073390614863565b60405180910390fd5b85871161077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906148cf565b60405180910390fd5b60648311156107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b99061493b565b60405180910390fd5b60006107cc611f6b565b905060006107d982610e8a565b905060008c8c8c8c8c8c8c8c8a8a6040516020016108009a99989796959493929190614a00565b60405160208183030381529060405290506000610835866108278480519060200120611fa7565b611fd790919063ffffffff16565b905061083f611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790614afc565b60405180910390fd5b6108e36108db611ffe565b60020161202b565b94506108ef858f612039565b6109026108fa611ffe565b60020161206e565b61095261090d611ffe565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061206e565b60006040518061012001604052808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018673ffffffffffffffffffffffffffffffffffffffff16815260200160008152509050806109b6612084565b6000016000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080155905050858573ffffffffffffffffffffffffffffffffffffffff167f889de1a576ddf6ed9570e1a2354ffe87302c20bd8af57b5bd4e3bbc84240e7f660405160405180910390a350505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610ada6120b1565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90614b68565b60405180910390fd5b82610b5d6120de565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610ba86120b1565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610c3a8561210b565b83610c43611ffe565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610c8d611ffe565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610cd7611ffe565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610d2b61212e565b60000160008481526020019081526020016000208054610d4a90614bb7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7690614bb7565b8015610dc35780601f10610d9857610100808354040283529160200191610dc3565b820191906000526020600020905b815481529060010190602001808311610da657829003601f168201915b50505050509050600081511415610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690614c35565b60405180910390fd5b610e1761212e565b60010181604051602001610e2c929190614ce9565b604051602081830303815290604052915050919050565b6000610e69610e5061215b565b6001016000848152602001908152602001600020612188565b9050919050565b6000610e85610e7d611ffe565b60020161202b565b905090565b6000610edc610e97611ffe565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061202b565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f235750610f228533611ccf565b5b610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990614d7f565b60405180910390fd5b610f7033868686868661219d565b5050505050565b6000610f81611ffe565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790614e11565b60405180910390fd5b6000610ffa6121c1565b60000190506000845167ffffffffffffffff81111561101c5761101b613a32565b5b60405190808252806020026020018201604052801561104a5781602001602082028036833780820191505090505b50905060005b855181101561119357600073ffffffffffffffffffffffffffffffffffffffff1686828151811061108457611083614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614ed2565b60405180910390fd5b8260008683815181106110f9576110f8614e31565b5b60200260200101518152602001908152602001600020600087838151811061112457611123614e31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061117a57611179614e31565b5b6020026020010181815250508080600101915050611050565b50809250505092915050565b60006111a96120de565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008061120d612084565b6000016000848152602001908152602001600020905080600001544211801561123a575080600101544211155b611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614f3e565b60405180910390fd5b60008160050154146112d05780600501548160080154106112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690614faa565b60405180910390fd5b5b61138b8160405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611393565b915050919050565b6000808260000151426113a691906147e3565b90506000836000015184602001516113be91906147e3565b90506113d98282866040015187606001518860800151611c5e565b92505050919050565b6113ea613745565b60006113f4612084565b600001600084815260200190815260200160002060405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820154815250509050600081600001511415611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90615016565b60405180910390fd5b80915050919050565b6060600061151961215b565b60010160008481526020019081526020016000209050600061153a82612188565b67ffffffffffffffff81111561155357611552613a32565b5b6040519080825280602002602001820160405280156115815781602001602082028036833780820191505090505b50905060005b61159083612188565b81101561160a576115aa81846121ee90919063ffffffff16565b8282815181106115bd576115bc614e31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061160290615036565b915050611587565b508092505050919050565b6060600061162161215b565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061166e82612208565b67ffffffffffffffff81111561168757611686613a32565b5b6040519080825280602002602001820160405280156116b55781602001602082028036833780820191505090505b50905060005b6116c483612208565b811015611710576116de818461221d90919063ffffffff16565b8282815181106116f1576116f0614e31565b5b602002602001018181525050808061170890615036565b9150506116bb565b508092505050919050565b600080611726611f6b565b90506000611732612084565b6000016000858152602001908152602001600020905080600001544211801561175f575080600101544211155b61179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590614f3e565b60405180910390fd5b60008160050154146117f55780600501548160080154106117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90614faa565b60405180910390fd5b5b60006118b28260405180610120016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882015481525050611393565b9050803410156118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee906150cb565b60405180910390fd5b6119138386600160405180602001604052806000815250612237565b600182600801600082825461192891906150eb565b925050819055506001858473ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4600060648360060154346119899190615141565b61199391906151ca565b9050600081346119a391906147e3565b90508360070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611a0f573d6000803e3d6000fd5b50611a18611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611a81573d6000803e3d6000fd5b50600195505050505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af69061526d565b60405180910390fd5b80611b086121c1565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bf991906139fc565b60405180910390a35050565b6000611c0f611ffe565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611c4261215b565b6000016000838152602001908152602001600020549050919050565b6000848385611c6d91906147e3565b87611c789190615141565b8486611c8491906147e3565b8489611c90919061528d565b611c9a9190615141565b8688611ca69190615141565b611cb091906150eb565b611cba91906147e3565b611cc491906151ca565b905095945050505050565b6000611cd96121c1565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611dac5750611dab8533611ccf565b5b611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de290614d7f565b60405180910390fd5b611df9338686868686612258565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890615330565b60405180910390fd5b611e796121c1565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006018600036905010158015611f875750611f863361119f565b5b15611f9b57601436033560601c9050611fa3565b339050611fa4565b5b90565b600081604051602001611fba91906153c7565b604051602081830303815290604052805190602001209050919050565b6000806000611fe6858561227c565b91509150611ff3816122ff565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061204261212e565b600001600084815260200190815260200160002090805190602001906120699291906137a7565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061211461212e565b600101908051906020019061212a9291906137a7565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000612196826000016124d4565b9050919050565b6121ab8686868686866124e5565b6121b98686868686866126cc565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b60006121fd83600001836129d8565b60001c905092915050565b6000612216826000016124d4565b9050919050565b600061222c83600001836129d8565b60001c905092915050565b61224633600086868686612a4c565b61225284848484612c33565b50505050565b612266868686868686612a4c565b612274868686868686612dbd565b505050505050565b6000806041835114156122be5760008060006020860151925060408601519150606086015160001a90506122b287828585613035565b945094505050506122f8565b6040835114156122ef5760008060208501519150604085015190506122e4868383613142565b9350935050506122f8565b60006002915091505b9250929050565b60006004811115612313576123126153ed565b5b816004811115612326576123256153ed565b5b1415612331576124d1565b60016004811115612345576123446153ed565b5b816004811115612358576123576153ed565b5b1415612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090615468565b60405180910390fd5b600260048111156123ad576123ac6153ed565b5b8160048111156123c0576123bf6153ed565b5b1415612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f8906154d4565b60405180910390fd5b60036004811115612415576124146153ed565b5b816004811115612428576124276153ed565b5b1415612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246090615566565b60405180910390fd5b60048081111561247c5761247b6153ed565b5b81600481111561248f5761248e6153ed565b5b14156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c7906155f8565b60405180910390fd5b5b50565b600081600001805490509050919050565b6125048473ffffffffffffffffffffffffffffffffffffffff16613190565b156126c4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161254a95949392919061566d565b602060405180830381600087803b15801561256457600080fd5b505af192505050801561259557506040513d601f19601f8201168201806040525081019061259291906156ea565b60015b61263b576125a1615724565b806308c379a014156125fe57506125b6615746565b806125c15750612600565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f59190613e4c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126329061584e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b9906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615972565b60405180910390fd5b8151835114612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790615a04565b60405180910390fd5b61278e8686868686866131a3565b60006127986121c1565b600001905060005b84518110156129505760008582815181106127be576127bd614e31565b5b6020026020010151905060008583815181106127dd576127dc614e31565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590615a96565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461293491906150eb565b925050819055505050808061294890615036565b9150506127a0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129c7929190615ab6565b60405180910390a450505050505050565b600081836000018054905011612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90615b5f565b60405180910390fd5b826000018281548110612a3957612a38614e31565b5b9060005260206000200154905092915050565b612a6b8473ffffffffffffffffffffffffffffffffffffffff16613190565b15612c2b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ab1959493929190615b7f565b602060405180830381600087803b158015612acb57600080fd5b505af1925050508015612afc57506040513d601f19601f82011682018060405250810190612af991906156ea565b60015b612ba257612b08615724565b806308c379a01415612b655750612b1d615746565b80612b285750612b67565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c9190613e4c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b999061584e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c20906158e0565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90615c4b565b60405180910390fd5b612cc233600086612cb3876131b9565b612cbc876131b9565b866131a3565b6000612ccc6121c1565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d3091906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612dae929190615c6b565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2490615972565b60405180910390fd5b612e4b868686612e3c876131b9565b612e45876131b9565b866131a3565b6000612e556121c1565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee890615a96565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fa791906150eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051613024929190615c6b565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613070576000600391509150613139565b601b8560ff16141580156130885750601c8560ff1614155b1561309a576000600491509150613139565b6000600187878787604051600081526020016040526040516130bf9493929190615cbf565b6020604051602081039080840390855afa1580156130e1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561313057600060019250925050613139565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061318287828885613035565b935093505050935093915050565b600080823b905060008111915050919050565b6131b1868686868686613233565b505050505050565b60606000600167ffffffffffffffff8111156131d8576131d7613a32565b5b6040519080825280602002602001820160405280156132065781602001602082028036833780820191505090505b509050828160008151811061321e5761321d614e31565b5b60200260200101818152505080915050919050565b613241868686868686613249565b505050505050565b613257868686868686613504565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146134fc57600061329461215b565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156134f657600087828151811061334957613348614e31565b5b6020026020010151905060008111156134e257600089838151811061337157613370614e31565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156133e1578187600001600083815260200190815260200160002060008282546133d591906150eb565b9250508190555061342d565b816133ec8d83611e00565b141561342c576134168c87600084815260200190815260200160002061350c90919063ffffffff16565b5061342a818661353c90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156134935781876000016000838152602001908152602001600020600082825461348791906147e3565b925050819055506134e0565b600061349f8c83611e00565b14156134df576134c98b87600084815260200190815260200160002061355690919063ffffffff16565b506134dd818561358690919063ffffffff16565b505b5b505b5080806134ee90615036565b91505061332b565b50505050505b505050505050565b505050505050565b6000613534836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6135a0565b905092915050565b600061354e836000018360001b6135a0565b905092915050565b600061357e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6136b2565b905092915050565b6000613598836000018360001b6136b2565b905092915050565b600080836001016000848152602001908152602001600020549050600081146136a65760006001826135d291906147e3565b9050600085600001600187600001805490506135ee91906147e3565b815481106135ff576135fe614e31565b5b906000526020600020015490508086600001838154811061362357613622614e31565b5b906000526020600020018190555060018261363e91906150eb565b866001016000838152602001908152602001600020819055508560000180548061366b5761366a615d04565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506136ac565b60009150505b92915050565b60006136be8383613722565b61371757826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061371c565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610120016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b8280546137b390614bb7565b90600052602060002090601f0160209004810192826137d5576000855561381c565b82601f106137ee57805160ff191683800117855561381c565b8280016001018555821561381c579182015b8281111561381b578251825591602001919060010190613800565b5b509050613829919061382d565b5090565b5b8082111561384657600081600090555060010161382e565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138898261385e565b9050919050565b6138998161387e565b81146138a457600080fd5b50565b6000813590506138b681613890565b92915050565b6000819050919050565b6138cf816138bc565b81146138da57600080fd5b50565b6000813590506138ec816138c6565b92915050565b6000806040838503121561390957613908613854565b5b6000613917858286016138a7565b9250506020613928858286016138dd565b9150509250929050565b61393b816138bc565b82525050565b60006020820190506139566000830184613932565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139918161395c565b811461399c57600080fd5b50565b6000813590506139ae81613988565b92915050565b6000602082840312156139ca576139c9613854565b5b60006139d88482850161399f565b91505092915050565b60008115159050919050565b6139f6816139e1565b82525050565b6000602082019050613a1160008301846139ed565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a6a82613a21565b810181811067ffffffffffffffff82111715613a8957613a88613a32565b5b80604052505050565b6000613a9c61384a565b9050613aa88282613a61565b919050565b600067ffffffffffffffff821115613ac857613ac7613a32565b5b613ad182613a21565b9050602081019050919050565b82818337600083830152505050565b6000613b00613afb84613aad565b613a92565b905082815260208101848484011115613b1c57613b1b613a1c565b5b613b27848285613ade565b509392505050565b600082601f830112613b4457613b43613a17565b5b8135613b54848260208601613aed565b91505092915050565b600067ffffffffffffffff821115613b7857613b77613a32565b5b613b8182613a21565b9050602081019050919050565b6000613ba1613b9c84613b5d565b613a92565b905082815260208101848484011115613bbd57613bbc613a1c565b5b613bc8848285613ade565b509392505050565b600082601f830112613be557613be4613a17565b5b8135613bf5848260208601613b8e565b91505092915050565b60008060008060008060008060006101208a8c031215613c2157613c20613854565b5b60008a013567ffffffffffffffff811115613c3f57613c3e613859565b5b613c4b8c828d01613b2f565b9950506020613c5c8c828d016138dd565b9850506040613c6d8c828d016138dd565b9750506060613c7e8c828d016138dd565b9650506080613c8f8c828d016138dd565b95505060a0613ca08c828d016138dd565b94505060c0613cb18c828d016138dd565b93505060e0613cc28c828d016138dd565b9250506101008a013567ffffffffffffffff811115613ce457613ce3613859565b5b613cf08c828d01613bd0565b9150509295985092959850929598565b600080600080600060a08688031215613d1c57613d1b613854565b5b600086013567ffffffffffffffff811115613d3a57613d39613859565b5b613d4688828901613b2f565b9550506020613d57888289016138a7565b9450506040613d68888289016138a7565b9350506060613d79888289016138a7565b9250506080613d8a888289016138a7565b9150509295509295909350565b600060208284031215613dad57613dac613854565b5b6000613dbb848285016138dd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dfe578082015181840152602081019050613de3565b83811115613e0d576000848401525b50505050565b6000613e1e82613dc4565b613e288185613dcf565b9350613e38818560208601613de0565b613e4181613a21565b840191505092915050565b60006020820190508181036000830152613e668184613e13565b905092915050565b600060208284031215613e8457613e83613854565b5b6000613e92848285016138a7565b91505092915050565b600067ffffffffffffffff821115613eb657613eb5613a32565b5b602082029050602081019050919050565b600080fd5b6000613edf613eda84613e9b565b613a92565b90508083825260208201905060208402830185811115613f0257613f01613ec7565b5b835b81811015613f2b5780613f1788826138dd565b845260208401935050602081019050613f04565b5050509392505050565b600082601f830112613f4a57613f49613a17565b5b8135613f5a848260208601613ecc565b91505092915050565b600080600080600060a08688031215613f7f57613f7e613854565b5b6000613f8d888289016138a7565b9550506020613f9e888289016138a7565b945050604086013567ffffffffffffffff811115613fbf57613fbe613859565b5b613fcb88828901613f35565b935050606086013567ffffffffffffffff811115613fec57613feb613859565b5b613ff888828901613f35565b925050608086013567ffffffffffffffff81111561401957614018613859565b5b61402588828901613bd0565b9150509295509295909350565b61403b8161387e565b82525050565b60006020820190506140566000830184614032565b92915050565b600067ffffffffffffffff82111561407757614076613a32565b5b602082029050602081019050919050565b600061409b6140968461405c565b613a92565b905080838252602082019050602084028301858111156140be576140bd613ec7565b5b835b818110156140e757806140d388826138a7565b8452602084019350506020810190506140c0565b5050509392505050565b600082601f83011261410657614105613a17565b5b8135614116848260208601614088565b91505092915050565b6000806040838503121561413657614135613854565b5b600083013567ffffffffffffffff81111561415457614153613859565b5b614160858286016140f1565b925050602083013567ffffffffffffffff81111561418157614180613859565b5b61418d85828601613f35565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6141cc816138bc565b82525050565b60006141de83836141c3565b60208301905092915050565b6000602082019050919050565b600061420282614197565b61420c81856141a2565b9350614217836141b3565b8060005b8381101561424857815161422f88826141d2565b975061423a836141ea565b92505060018101905061421b565b5085935050505092915050565b6000602082019050818103600083015261426f81846141f7565b905092915050565b600080fd5b60006142878261385e565b9050919050565b6142978161427c565b81146142a257600080fd5b50565b6000813590506142b48161428e565b92915050565b600061012082840312156142d1576142d0614277565b5b6142dc610120613a92565b905060006142ec848285016138dd565b6000830152506020614300848285016138dd565b6020830152506040614314848285016138dd565b6040830152506060614328848285016138dd565b606083015250608061433c848285016138dd565b60808301525060a0614350848285016138dd565b60a08301525060c0614364848285016138dd565b60c08301525060e0614378848285016142a5565b60e08301525061010061438d848285016138dd565b6101008301525092915050565b600061012082840312156143b1576143b0613854565b5b60006143bf848285016142ba565b91505092915050565b6143d18161427c565b82525050565b610120820160008201516143ee60008501826141c3565b50602082015161440160208501826141c3565b50604082015161441460408501826141c3565b50606082015161442760608501826141c3565b50608082015161443a60808501826141c3565b5060a082015161444d60a08501826141c3565b5060c082015161446060c08501826141c3565b5060e082015161447360e08501826143c8565b506101008201516144886101008501826141c3565b50505050565b6000610120820190506144a460008301846143d7565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144df8161387e565b82525050565b60006144f183836144d6565b60208301905092915050565b6000602082019050919050565b6000614515826144aa565b61451f81856144b5565b935061452a836144c6565b8060005b8381101561455b57815161454288826144e5565b975061454d836144fd565b92505060018101905061452e565b5085935050505092915050565b60006020820190508181036000830152614582818461450a565b905092915050565b614593816139e1565b811461459e57600080fd5b50565b6000813590506145b08161458a565b92915050565b600080604083850312156145cd576145cc613854565b5b60006145db858286016138a7565b92505060206145ec858286016145a1565b9150509250929050565b600080600080600060a0868803121561461257614611613854565b5b6000614620888289016138dd565b9550506020614631888289016138dd565b9450506040614642888289016138dd565b9350506060614653888289016138dd565b9250506080614664888289016138dd565b9150509295509295909350565b6000806040838503121561468857614687613854565b5b6000614696858286016138a7565b92505060206146a7858286016138a7565b9150509250929050565b600080600080600060a086880312156146cd576146cc613854565b5b60006146db888289016138a7565b95505060206146ec888289016138a7565b94505060406146fd888289016138dd565b935050606061470e888289016138dd565b925050608086013567ffffffffffffffff81111561472f5761472e613859565b5b61473b88828901613bd0565b9150509295509295909350565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b600061477e600283613dcf565b915061478982614748565b602082019050919050565b600060208201905081810360008301526147ad81614771565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147ee826138bc565b91506147f9836138bc565b92508282101561480c5761480b6147b4565b5b828203905092915050565b7f4953000000000000000000000000000000000000000000000000000000000000600082015250565b600061484d600283613dcf565b915061485882614817565b602082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148b9600283613dcf565b91506148c482614883565b602082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000614925600383613dcf565b9150614930826148ef565b602082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b600081905092915050565b600061497182613dc4565b61497b818561495b565b935061498b818560208601613de0565b80840191505092915050565b6000819050919050565b6149b26149ad826138bc565b614997565b82525050565b60008160601b9050919050565b60006149d0826149b8565b9050919050565b60006149e2826149c5565b9050919050565b6149fa6149f58261387e565b6149d7565b82525050565b6000614a0c828d614966565b9150614a18828c6149a1565b602082019150614a28828b6149a1565b602082019150614a38828a6149a1565b602082019150614a4882896149a1565b602082019150614a5882886149a1565b602082019150614a6882876149a1565b602082019150614a7882866149a1565b602082019150614a8882856149e9565b601482019150614a9882846149a1565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ae6600283613dcf565b9150614af182614ab0565b602082019050919050565b60006020820190508181036000830152614b1581614ad9565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b52600283613dcf565b9150614b5d82614b1c565b602082019050919050565b60006020820190508181036000830152614b8181614b45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bcf57607f821691505b60208210811415614be357614be2614b88565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c1f601d83613dcf565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b60008190508160005260206000209050919050565b60008154614c7781614bb7565b614c81818661495b565b94506001821660008114614c9c5760018114614cad57614ce0565b60ff19831686528186019350614ce0565b614cb685614c55565b60005b83811015614cd857815481890152600182019150602081019050614cb9565b838801955050505b50505092915050565b6000614cf58285614c6a565b9150614d018284614966565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d69602983613dcf565b9150614d7482614d0d565b604082019050919050565b60006020820190508181036000830152614d9881614d5c565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614dfb602983613dcf565b9150614e0682614d9f565b604082019050919050565b60006020820190508181036000830152614e2a81614dee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ebc603183613dcf565b9150614ec782614e60565b604082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000614f28600383613dcf565b9150614f3382614ef2565b602082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f94600283613dcf565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000615000600383613dcf565b915061500b82614fca565b602082019050919050565b6000602082019050818103600083015261502f81614ff3565b9050919050565b6000615041826138bc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615074576150736147b4565b5b600182019050919050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006150b5600283613dcf565b91506150c08261507f565b602082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b60006150f6826138bc565b9150615101836138bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615136576151356147b4565b5b828201905092915050565b600061514c826138bc565b9150615157836138bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151905761518f6147b4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151d5826138bc565b91506151e0836138bc565b9250826151f0576151ef61519b565b5b828204905092915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615257602983613dcf565b9150615262826151fb565b604082019050919050565b600060208201905081810360008301526152868161524a565b9050919050565b6000615298826138bc565b91506152a3836138bc565b9250826152b3576152b261519b565b5b828206905092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061531a602b83613dcf565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000615386601c8361495b565b915061539182615350565b601c82019050919050565b6000819050919050565b6000819050919050565b6153c16153bc8261539c565b6153a6565b82525050565b60006153d282615379565b91506153de82846153b0565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615452601883613dcf565b915061545d8261541c565b602082019050919050565b6000602082019050818103600083015261548181615445565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006154be601f83613dcf565b91506154c982615488565b602082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615550602283613dcf565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602283613dcf565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061563f82615618565b6156498185615623565b9350615659818560208601613de0565b61566281613a21565b840191505092915050565b600060a0820190506156826000830188614032565b61568f6020830187614032565b81810360408301526156a181866141f7565b905081810360608301526156b581856141f7565b905081810360808301526156c98184615634565b90509695505050505050565b6000815190506156e481613988565b92915050565b600060208284031215615700576156ff613854565b5b600061570e848285016156d5565b91505092915050565b60008160e01c9050919050565b600060033d11156157435760046000803e615740600051615717565b90505b90565b600060443d1015615756576157d9565b61575e61384a565b60043d036004823e80513d602482011167ffffffffffffffff821117156157865750506157d9565b808201805167ffffffffffffffff8111156157a457505050506157d9565b80602083010160043d0385018111156157c15750505050506157d9565b6157d082602001850186613a61565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615838603483613dcf565b9150615843826157dc565b604082019050919050565b600060208201905081810360008301526158678161582b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006158ca602883613dcf565b91506158d58261586e565b604082019050919050565b600060208201905081810360008301526158f9816158bd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061595c602583613dcf565b915061596782615900565b604082019050919050565b6000602082019050818103600083015261598b8161594f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006159ee602883613dcf565b91506159f982615992565b604082019050919050565b60006020820190508181036000830152615a1d816159e1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615a80602b83613dcf565b9150615a8b82615a24565b604082019050919050565b60006020820190508181036000830152615aaf81615a73565b9050919050565b60006040820190508181036000830152615ad081856141f7565b90508181036020830152615ae481846141f7565b90509392505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b49602283613dcf565b9150615b5482615aed565b604082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b600060a082019050615b946000830188614032565b615ba16020830187614032565b615bae6040830186613932565b615bbb6060830185613932565b8181036080830152615bcd8184615634565b90509695505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c35602183613dcf565b9150615c4082615bd9565b604082019050919050565b60006020820190508181036000830152615c6481615c28565b9050919050565b6000604082019050615c806000830185613932565b615c8d6020830184613932565b9392505050565b615c9d8161539c565b82525050565b600060ff82169050919050565b615cb981615ca3565b82525050565b6000608082019050615cd46000830187615c94565b615ce16020830186615cb0565b615cee6040830185615c94565b615cfb6060830184615c94565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220b8bcaafc85e1f6a32ba0db25e71bda8b7db5bc83e6600d4467752d098947a2e364736f6c63430008090033' type CyberDropBaseConstructorParams = | [signer?: Signer]