UNPKG

@settlemint/solidity-attestation-service

Version:
1 lines 195 kB
{"abi":[{"type":"constructor","inputs":[{"name":"registry","type":"address","internalType":"contract ISchemaRegistry"}],"stateMutability":"nonpayable"},{"type":"function","name":"attest","inputs":[{"name":"request","type":"tuple","internalType":"struct AttestationRequest","components":[{"name":"schema","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"tuple","internalType":"struct AttestationRequestData","components":[{"name":"recipient","type":"address","internalType":"address"},{"name":"expirationTime","type":"uint64","internalType":"uint64"},{"name":"revocable","type":"bool","internalType":"bool"},{"name":"refUID","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"}]}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"attestByDelegation","inputs":[{"name":"delegatedRequest","type":"tuple","internalType":"struct DelegatedAttestationRequest","components":[{"name":"schema","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"tuple","internalType":"struct AttestationRequestData","components":[{"name":"recipient","type":"address","internalType":"address"},{"name":"expirationTime","type":"uint64","internalType":"uint64"},{"name":"revocable","type":"bool","internalType":"bool"},{"name":"refUID","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"name":"signature","type":"tuple","internalType":"struct Signature","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"name":"attester","type":"address","internalType":"address"},{"name":"deadline","type":"uint64","internalType":"uint64"}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getAttestTypeHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"getAttestation","inputs":[{"name":"uid","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Attestation","components":[{"name":"uid","type":"bytes32","internalType":"bytes32"},{"name":"schema","type":"bytes32","internalType":"bytes32"},{"name":"time","type":"uint64","internalType":"uint64"},{"name":"expirationTime","type":"uint64","internalType":"uint64"},{"name":"revocationTime","type":"uint64","internalType":"uint64"},{"name":"refUID","type":"bytes32","internalType":"bytes32"},{"name":"recipient","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"},{"name":"revocable","type":"bool","internalType":"bool"},{"name":"data","type":"bytes","internalType":"bytes"}]}],"stateMutability":"view"},{"type":"function","name":"getDomainSeparator","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getName","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getNonce","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRevokeOffchain","inputs":[{"name":"revoker","type":"address","internalType":"address"},{"name":"data","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getRevokeTypeHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"getSchemaRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ISchemaRegistry"}],"stateMutability":"view"},{"type":"function","name":"getTimestamp","inputs":[{"name":"data","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"increaseNonce","inputs":[{"name":"newNonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isAttestationValid","inputs":[{"name":"uid","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"multiAttest","inputs":[{"name":"multiRequests","type":"tuple[]","internalType":"struct MultiAttestationRequest[]","components":[{"name":"schema","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"tuple[]","internalType":"struct AttestationRequestData[]","components":[{"name":"recipient","type":"address","internalType":"address"},{"name":"expirationTime","type":"uint64","internalType":"uint64"},{"name":"revocable","type":"bool","internalType":"bool"},{"name":"refUID","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"}]}]}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"payable"},{"type":"function","name":"multiAttestByDelegation","inputs":[{"name":"multiDelegatedRequests","type":"tuple[]","internalType":"struct MultiDelegatedAttestationRequest[]","components":[{"name":"schema","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"tuple[]","internalType":"struct AttestationRequestData[]","components":[{"name":"recipient","type":"address","internalType":"address"},{"name":"expirationTime","type":"uint64","internalType":"uint64"},{"name":"revocable","type":"bool","internalType":"bool"},{"name":"refUID","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"name":"signatures","type":"tuple[]","internalType":"struct Signature[]","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"name":"attester","type":"address","internalType":"address"},{"name":"deadline","type":"uint64","internalType":"uint64"}]}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"payable"},{"type":"function","name":"multiRevoke","inputs":[{"name":"multiRequests","type":"tuple[]","internalType":"struct MultiRevocationRequest[]","components":[{"name":"schema","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"tuple[]","internalType":"struct RevocationRequestData[]","components":[{"name":"uid","type":"bytes32","internalType":"bytes32"},{"name":"value","type":"uint256","internalType":"uint256"}]}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"multiRevokeByDelegation","inputs":[{"name":"multiDelegatedRequests","type":"tuple[]","internalType":"struct MultiDelegatedRevocationRequest[]","components":[{"name":"schema","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"tuple[]","internalType":"struct RevocationRequestData[]","components":[{"name":"uid","type":"bytes32","internalType":"bytes32"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"name":"signatures","type":"tuple[]","internalType":"struct Signature[]","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"name":"revoker","type":"address","internalType":"address"},{"name":"deadline","type":"uint64","internalType":"uint64"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"multiRevokeOffchain","inputs":[{"name":"data","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"nonpayable"},{"type":"function","name":"multiTimestamp","inputs":[{"name":"data","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"nonpayable"},{"type":"function","name":"revoke","inputs":[{"name":"request","type":"tuple","internalType":"struct RevocationRequest","components":[{"name":"schema","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"tuple","internalType":"struct RevocationRequestData","components":[{"name":"uid","type":"bytes32","internalType":"bytes32"},{"name":"value","type":"uint256","internalType":"uint256"}]}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"revokeByDelegation","inputs":[{"name":"delegatedRequest","type":"tuple","internalType":"struct DelegatedRevocationRequest","components":[{"name":"schema","type":"bytes32","internalType":"bytes32"},{"name":"data","type":"tuple","internalType":"struct RevocationRequestData","components":[{"name":"uid","type":"bytes32","internalType":"bytes32"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"name":"signature","type":"tuple","internalType":"struct Signature","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"name":"revoker","type":"address","internalType":"address"},{"name":"deadline","type":"uint64","internalType":"uint64"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"revokeOffchain","inputs":[{"name":"data","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"nonpayable"},{"type":"function","name":"timestamp","inputs":[{"name":"data","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"nonpayable"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"Attested","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":true,"internalType":"address"},{"name":"uid","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"schemaUID","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"NonceIncreased","inputs":[{"name":"oldNonce","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newNonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Revoked","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":true,"internalType":"address"},{"name":"uid","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"schemaUID","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RevokedOffchain","inputs":[{"name":"revoker","type":"address","indexed":true,"internalType":"address"},{"name":"data","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"timestamp","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Timestamped","inputs":[{"name":"data","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"timestamp","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"error","name":"AccessDenied","inputs":[]},{"type":"error","name":"AlreadyRevoked","inputs":[]},{"type":"error","name":"AlreadyRevokedOffchain","inputs":[]},{"type":"error","name":"AlreadyTimestamped","inputs":[]},{"type":"error","name":"DeadlineExpired","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InsufficientValue","inputs":[]},{"type":"error","name":"InvalidAttestation","inputs":[]},{"type":"error","name":"InvalidAttestations","inputs":[]},{"type":"error","name":"InvalidExpirationTime","inputs":[]},{"type":"error","name":"InvalidLength","inputs":[]},{"type":"error","name":"InvalidNonce","inputs":[]},{"type":"error","name":"InvalidOffset","inputs":[]},{"type":"error","name":"InvalidRegistry","inputs":[]},{"type":"error","name":"InvalidRevocation","inputs":[]},{"type":"error","name":"InvalidRevocations","inputs":[]},{"type":"error","name":"InvalidSchema","inputs":[]},{"type":"error","name":"InvalidShortString","inputs":[]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"InvalidVerifier","inputs":[]},{"type":"error","name":"Irrevocable","inputs":[]},{"type":"error","name":"NotFound","inputs":[]},{"type":"error","name":"NotPayable","inputs":[]},{"type":"error","name":"StringTooLong","inputs":[{"name":"str","type":"string","internalType":"string"}]},{"type":"error","name":"WrongSchema","inputs":[]}],"bytecode":{"object":"0x6101e0806040523461032c5760208161493c80380380916100208285610330565b83398101031261032c57516001600160a01b0381169081810361032c576040519161004c604084610330565b60038352602083016245415360e81b81526040519061006c604083610330565b600582526020820190640312e332e360dc1b82526001608052600360a0525f60c05261009786610353565b610180526100a4836104d5565b6101a05285519020918261014052519020806101605246610100526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261011060c082610330565b51902060e052306101205282516001600160401b03811161031857600254600181811c9116801561030e575b60208210146102fa57601f8111610297575b506020601f821160011461023457819293945f92610229575b50508160011b915f199060031b1c1916176002555b1561021a576101c05260405161432e908161060e8239608051816108dc015260a05181610907015260c05181610932015260e05181613712015261010051816137cf015261012051816136e301526101405181613761015261016051816137870152610180518161075b01526101a0518161078701526101c0518181816101e401528181611e6601528181612186015281816125d00152612d2e0152f35b6311a1e69760e01b5f5260045ffd5b015190505f80610167565b601f1982169060025f52805f20915f5b81811061027f57509583600195969710610267575b505050811b0160025561017c565b01515f1960f88460031b161c191690555f8080610259565b9192602060018192868b015181550194019201610244565b60025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace601f830160051c810191602084106102f0575b601f0160051c01905b8181106102e5575061014e565b5f81556001016102d8565b90915081906102cf565b634e487b7160e01b5f52602260045260245ffd5b90607f169061013c565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b601f909101601f19168101906001600160401b0382119082101761031857604052565b908151602081105f146103cd575090601f81511161038d57602081519101516020821061037e571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b6001600160401b038111610318575f54600181811c911680156104cb575b60208210146102fa57601f8111610499575b50602092601f821160011461043a57928192935f9261042f575b50508160011b915f199060031b1c1916175f5560ff90565b015190505f80610417565b601f198216935f8052805f20915f5b8681106104815750836001959610610469575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f808061045c565b91926020600181928685015181550194019201610449565b5f8052601f60205f20910160051c810190601f830160051c015b8181106104c057506103fd565b5f81556001016104b3565b90607f16906103eb565b908151602081105f14610500575090601f81511161038d57602081519101516020821061037e571790565b6001600160401b03811161031857600154600181811c91168015610603575b60208210146102fa57601f81116105d0575b50602092601f821160011461056f57928192935f92610564575b50508160011b915f199060031b1c19161760015560ff90565b015190505f8061054b565b601f1982169360015f52805f20915f5b8681106105b857508360019596106105a0575b505050811b0160015560ff90565b01515f1960f88460031b161c191690555f8080610592565b9192602060018192868501518155019401920161057f565b60015f52601f60205f20910160051c810190601f830160051c015b8181106105f85750610531565b5f81556001016105eb565b90607f169061051f56fe60806040526004361015610011575f80fd5b5f3560e01c80630eabf66014610edb57806312b11a1714610ea157806313893f6114610e3057806317d7de7c14610d485780632d0335ab14610d035780633c04271514610c1157806344adc90e14610b325780634692626714610af25780634cb7e9e514610a215780634d003070146109f757806354fd4d50146108bd57806379f7573a1461082c57806384b0196e14610743578063954115251461050e578063a3112a64146104c3578063a6d4dbc7146103c2578063b469318d14610367578063b83010d31461032d578063cf190f3414610302578063d45c4435146102ce578063e30bb5631461029a578063e71ff3651461022a578063ed24911d14610208578063f10b5cc8146101b85763f17325e71461012c575f80fd5b60206003193601126101b45760043567ffffffffffffffff81116101b45780600401604060031983360301126101b45760206101a481936101ab93610186610172611732565b92610181602436920184611797565b611675565b61018f836114fd565b52610199826114fd565b503491339135612562565b01516114fd565b51604051908152f35b5f80fd5b346101b4575f6003193601126101b457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b4575f6003193601126101b45760206102226136cc565b604051908152f35b346101b45760206003193601126101b45760043567ffffffffffffffff81116101b45761025b9036906004016110f9565b9067ffffffffffffffff4216915f5b81811061027c57602084604051908152f35b806102948561028e6001948688611558565b3561349b565b0161026a565b346101b45760206003193601126101b45760206102c46004355f52600460205260405f2054151590565b6040519015158152f35b346101b45760206003193601126101b4576004355f526005602052602067ffffffffffffffff60405f205416604051908152f35b346101b45760206003193601126101b457602067ffffffffffffffff42166102228160043533612348565b346101b4575f6003193601126101b45760206040517fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e758152f35b346101b45760406003193601126101b45773ffffffffffffffffffffffffffffffffffffffff61039561114f565b165f52600660205260405f206024355f52602052602067ffffffffffffffff60405f205416604051908152f35b6101006003193601126101b4576040516103db81611300565b6004358082526103ea366113f5565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126101b45760405161042581611365565b60643560ff811681036101b4578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff811681036101b45780606084015260e43567ffffffffffffffff811681036101b457836104959160806104c1960152611b1f565b61049d611933565b6104a6366113f5565b6104af826114fd565b526104b9816114fd565b503492611e1b565b005b346101b45760206003193601126101b4576104dc611a04565b506004355f52600460205261050a6104f660405f20611a4e565b6040519182916020835260208301906111ff565b0390f35b60206003193601126101b45760043567ffffffffffffffff81116101b45761053a9036906004016110f9565b90610544826117eb565b915f915f1982019083345b84821061056f5761050a6105638789613433565b60405191829182611193565b61057f82868599969897996112c0565b9461058d6020870187611873565b9390918415801561072b575b610703575f9996604089019460608a01968a359960808c01359967ffffffffffffffff8b16809b14159e5b83811015610694578f908e6105e98c6105e38d8560051b810190611797565b926119b0565b831015610667576105f98e6117ca565b936101b4578f908f9060019561064c73ffffffffffffffffffffffffffffffffffffffff9261063b610661976040519761063289611300565b88523690611675565b6020870152369060608902016114aa565b60408501521660608301526080820152612414565b016105c4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b509a8d9e506106d1949c50839a50600198506106cb6106da9698889f6106c39060209a9d9796959d14966117ca565b9336916118c7565b90612cbd565b9586519061151e565b940180516106e8898961150a565b526106f3888861150a565b505151019501909395929161054f565b7f947d5a84000000000000000000000000000000000000000000000000000000005f5260045ffd5b5061073960408901896119b0565b9050851415610599565b346101b4575f6003193601126101b4576107fe61077f7f0000000000000000000000000000000000000000000000000000000000000000613e65565b61050a6107ab7f0000000000000000000000000000000000000000000000000000000000000000613edd565b61080c604051916107bd6020846113ba565b5f83525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e087019061112a565b90858203604087015261112a565b904660608501523060808501525f60a085015283820360c08501526111cc565b346101b45760206003193601126101b457600435335f52600360205260405f20549081811115610895577f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb791604091335f52600360205280835f205582519182526020820152a1005b7f756688fe000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101b4575f6003193601126101b45761050a60206109e360016109007f0000000000000000000000000000000000000000000000000000000000000000613547565b818461092b7f0000000000000000000000000000000000000000000000000000000000000000613547565b81806109567f0000000000000000000000000000000000000000000000000000000000000000613547565b9260405199878b985191829101848a015e8701907f2e0000000000000000000000000000000000000000000000000000000000000083830152805192839101602183015e0101907f2e0000000000000000000000000000000000000000000000000000000000000084830152805192839101600283015e01015f838201520301601f1981018352826113ba565b60405191829160208352602083019061112a565b346101b45760206003193601126101b457602067ffffffffffffffff42166102228160043561349b565b60206003193601126101b45760043567ffffffffffffffff81116101b457610a4d9036906004016110f9565b5f19810191905f90345b818310610a6057005b610a6b838386611833565b60208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156101b45781019182359267ffffffffffffffff84116101b457602001928060061b360384136101b45760019382610ae492610aea95610add8c8b14943393369161143b565b903561213a565b9061151e565b920191610a57565b60606003193601126101b4576104c1610b09611933565b610b12366113f5565b610b1b826114fd565b52610b25816114fd565b5034903390600435611e1b565b60206003193601126101b45760043567ffffffffffffffff81116101b457610b5e9036906004016110f9565b90610b68826117eb565b915f9134905f925f198101905b808510610b895761050a6105638789613433565b9091929394610b99868386611833565b906020820191610ba98382611873565b90501561070357610be9610be089898885610bd9610bcb60019a602099611873565b9390951494339336916118c7565b9035612cbd565b9788519061151e565b96018051610bf7898b61150a565b52610c02888a61150a565b50515101950193929190610b75565b60206003193601126101b45760043567ffffffffffffffff81116101b457806004019060e060031982360301126101b457604051610c4e81611300565b823592838252602483019384359467ffffffffffffffff86116101b457610cfb6101ab95610ce26101a495610ccf60209a98610c918c9a60043691880101611675565b8a820152610ca236604487016114aa565b6040820152610cc560c460a4870196610cba88611172565b6060850152016114e8565b6080820152612414565b610181610cda611732565b953692611797565b610ceb846114fd565b52610cf5836114fd565b506117ca565b903492612562565b346101b45760206003193601126101b45773ffffffffffffffffffffffffffffffffffffffff610d3161114f565b165f526003602052602060405f2054604051908152f35b346101b4575f6003193601126101b4576040515f600254610d6881611568565b8084529060018116908115610dee5750600114610d90575b61050a836109e3818503826113ba565b60025f9081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b808210610dd4575090915081016020016109e3610d80565b919260018160209254838588010152019101909291610dbc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506109e39050610d80565b346101b45760206003193601126101b45760043567ffffffffffffffff81116101b457610e619036906004016110f9565b9067ffffffffffffffff4216915f5b818110610e8257602084604051908152f35b80610e9b85610e946001948688611558565b3533612348565b01610e70565b346101b4575f6003193601126101b45760206040517ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880768152f35b60206003193601126101b45760043567ffffffffffffffff81116101b457610f079036906004016110f9565b5f198101915f91345b818410610f1957005b610f248483856112c0565b60a0813603126101b457604051610f3a81611300565b81358152602082013567ffffffffffffffff81116101b457820136601f820112156101b457610f7090369060208135910161143b565b9060208101918252604083013567ffffffffffffffff81116101b457830136601f820112156101b457803590610fa5826113dd565b91610fb360405193846113ba565b808352602060608185019202830101913683116101b457602001905b8282106110df5750505060408201818152610fff6080610ff160608801611172565b9660608601978852016114e8565b9360808401948552519384519283159081156110d3575b50610703575f5b8381106110605750505050611058928460019593610ae493519073ffffffffffffffffffffffffffffffffffffffff8c8c149451169161213a565b930192610f10565b6001906110cd8651611072838a61150a565b5161107e84885161150a565b5173ffffffffffffffffffffffffffffffffffffffff8c51169067ffffffffffffffff88511692604051946110b286611300565b85526020850152604084015260608301526080820152611b1f565b0161101d565b9050518314158c611016565b60206060916110ee36856114aa565b815201910190610fcf565b9181601f840112156101b45782359167ffffffffffffffff83116101b4576020808501948460051b0101116101b457565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b457565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b457565b60206040818301928281528451809452019201905f5b8181106111b65750505090565b82518452602093840193909201916001016111a9565b90602080835192838152019201905f5b8181106111e95750505090565b82518452602093840193909201916001016111dc565b906101406101206112bd93805184526020810151602085015267ffffffffffffffff604082015116604085015267ffffffffffffffff606082015116606085015267ffffffffffffffff608082015116608085015260a081015160a085015273ffffffffffffffffffffffffffffffffffffffff60c08201511660c085015273ffffffffffffffffffffffffffffffffffffffff60e08201511660e0850152610100810151151561010085015201519181610120820152019061112a565b90565b91908110156106675760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61813603018212156101b4570190565b60a0810190811067ffffffffffffffff82111761131c57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761131c57604052565b6060810190811067ffffffffffffffff82111761131c57604052565b60c0810190811067ffffffffffffffff82111761131c57604052565b610140810190811067ffffffffffffffff82111761131c57604052565b90601f601f19910116810190811067ffffffffffffffff82111761131c57604052565b67ffffffffffffffff811161131c5760051b60200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc60409101126101b4576040519061142c82611349565b60243582526044356020830152565b929192611447826113dd565b9361145560405195866113ba565b602085848152019260061b8201918183116101b457925b8284106114795750505050565b6040848303126101b4576020604091825161149381611349565b86358152828701358382015281520193019261146c565b91908260609103126101b4576040516114c281611365565b8092803560ff811681036101b45760409182918452602081013560208501520135910152565b359067ffffffffffffffff821682036101b457565b8051156106675760200190565b80518210156106675760209160051b010190565b9190820391821161152b57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908110156106675760051b0190565b90600182811c921680156115af575b602083101461158257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611577565b5f92918154916115c883611568565b808352926001811690811561161d57506001146115e457505050565b5f9081526020812093945091925b838310611603575060209250010190565b6001816020929493945483858701015201910191906115f2565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b67ffffffffffffffff811161131c57601f01601f191660200190565b919060c0838203126101b4576040519061168e82611381565b819361169981611172565b83526116a7602082016114e8565b6020840152604081013580151581036101b457604084015260608101356060840152608081013567ffffffffffffffff81116101b45781019082601f830112156101b4578135926116f784611659565b9061170560405192836113ba565b848252602085850101116101b4575f60208560a09682889701838601378301015260808501520135910152565b6040805190919061174383826113ba565b6001815291601f1901825f5b82811061175b57505050565b60209060405161176a81611381565b5f81525f838201525f60408201525f6060820152606060808201525f60a08201528282850101520161174f565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41813603018212156101b4570190565b3573ffffffffffffffffffffffffffffffffffffffff811681036101b45790565b906117f5826113dd565b61180260405191826113ba565b828152601f1961181282946113dd565b01905f5b82811061182257505050565b806060602080938501015201611816565b91908110156106675760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1813603018212156101b4570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b4570180359067ffffffffffffffff82116101b457602001918160051b360383136101b457565b9291906118d3816113dd565b936118e160405195866113ba565b602085838152019160051b8101918383116101b45781905b838210611907575050505050565b813567ffffffffffffffff81116101b4576020916119288784938701611675565b8152019101906118f9565b6040805190919061194483826113ba565b6001815291601f1901825f5b82811061195c57505050565b60209060405161196b81611349565b5f81525f8382015282828501015201611950565b90611989826113dd565b61199660405191826113ba565b828152601f196119a682946113dd565b0190602036910137565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b4570180359067ffffffffffffffff82116101b4576020019160608202360383136101b457565b60405190611a118261139d565b6060610120835f81525f60208201525f60408201525f838201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201520152565b906006610120604051611a608161139d565b611b0d8195805483526001810154602084015267ffffffffffffffff60028201548181166040860152818160401c16606086015260801c166080840152600381015460a084015273ffffffffffffffffffffffffffffffffffffffff60048201541660c084015260ff600582015473ffffffffffffffffffffffffffffffffffffffff811660e086015260a01c161515610100840152611b0660405180968193016115b9565b03846113ba565b0152565b5f19811461152b5760010190565b6080810167ffffffffffffffff8151168015159081611cc9575b50611ca1578173ffffffffffffffffffffffffffffffffffffffff611c026020611c729501519260408101519460608201948486511692519160208251920151845f52600360205267ffffffffffffffff60405f2092835493611b9b85611b11565b90555116926040519460208601967fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75885260408701526060860152608085015260a084015260c083015260e082015260e08152611bfa610100826113ba565b5190206137f5565b915116611c6d6020840151611c5f60ff60408701519651166040519687936020850191926041937fff00000000000000000000000000000000000000000000000000000000000000928452602084015260f81b1660408201520190565b03601f1981018552846113ba565b613836565b15611c7957565b7f8baa579f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f1ab7da6b000000000000000000000000000000000000000000000000000000005f5260045ffd5b905067ffffffffffffffff4216115f611b39565b519081151582036101b457565b6020818303126101b45780519067ffffffffffffffff82116101b45701906080828203126101b457604051916080830183811067ffffffffffffffff82111761131c5760405280518352602081015173ffffffffffffffffffffffffffffffffffffffff811681036101b4576020840152611d6760408201611cdd565b604084015260608101519067ffffffffffffffff82116101b4570181601f820112156101b457805190611d9982611659565b92611da760405194856113ba565b828452602083830101116101b457815f9260208093018386015e83010152606082015290565b90611dd7826113dd565b611de460405191826113ba565b828152601f19611df482946113dd565b01905f5b828110611e0457505050565b602090611e0f611a04565b82828501015201611df8565b9190604051907fa2ea7c6e0000000000000000000000000000000000000000000000000000000082528360048301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561212f575f9261210b575b508151156120bb5792835190611eab82611dcd565b93611eb58361197f565b954267ffffffffffffffff16905f5b858110611edf57505050505050916112bd93916001936139f4565b611ee9818361150a565b519081515f52600460205260405f20918254156120e357866001840154036120bb57600583015473ffffffffffffffffffffffffffffffffffffffff8716908173ffffffffffffffffffffffffffffffffffffffff8216036120935760a01c60ff161561206b57600284019167ffffffffffffffff835460801c16612043577ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff8f8f88612030918f99936120068f9d61200160019f60c098907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b611a4e565b612010848461150a565b5261201b838361150a565b5061202a83888b01519261150a565b5261150a565b510151169251604051908152a401611ec4565b7f905e7107000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f157bd4c3000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca88867000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fbf37b20e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fc5723b51000000000000000000000000000000000000000000000000000000005f5260045ffd5b6121289192503d805f833e61212081836113ba565b810190611cea565b905f611e96565b6040513d5f823e3d90fd5b949392916040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081528660048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561212f575f9161232e575b508051156120bb5782516121c981611dcd565b926121d38261197f565b944267ffffffffffffffff16905f5b8481106121f95750505050506112bd9596506139f4565b612203818361150a565b519081515f52600460205260405f208054156120e3578d6001820154036120bb57600581015473ffffffffffffffffffffffffffffffffffffffff8716908173ffffffffffffffffffffffffffffffffffffffff8216036120935760a01c60ff161561206b57600282019367ffffffffffffffff855460801c16612043578f92602073ffffffffffffffffffffffffffffffffffffffff60c08f8f899061231b926120068f9861200160019f9a7ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6159b907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b510151169251604051908152a4016121e2565b61234291503d805f833e61212081836113ba565b5f6121b6565b73ffffffffffffffffffffffffffffffffffffffff1691825f52600660205260405f2090825f528160205267ffffffffffffffff60405f2054166123ec5767ffffffffffffffff91835f5260205260405f208282167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905516917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22295f80a4565b7fec9d6eeb000000000000000000000000000000000000000000000000000000005f5260045ffd5b6080810167ffffffffffffffff8151168015159081612535575b50611ca1578173ffffffffffffffffffffffffffffffffffffffff611c026020611c7295015192604081015194606082019484865116925191858251169167ffffffffffffffff602082015116906040810151151560608201519060a060808401516020815191012093015193885f52600360205267ffffffffffffffff60405f20968754976124bd89611b11565b90555116966040519860208a019a7ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880768c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152611bfa610180826113ba565b905067ffffffffffffffff4216115f61242e565b6040519061255682611349565b60606020835f81520152565b929161256c612549565b50815193612578612549565b946125828161197f565b6020870152604051917fa2ea7c6e0000000000000000000000000000000000000000000000000000000083528060048401525f8360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa92831561212f575f93612ca1575b508251156120bb5761261482949592611dcd565b9361261e8161197f565b955f935b8285106126415750505050509161263c9391600193613c67565b815290565b9195999094989397612656898499959961150a565b519960208b019767ffffffffffffffff8951168015159081612c8c575b50612c645760408201511580612c57575b61206b5789988c6060810151915167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519d8e6126d18161139d565b5f8152602001528d4267ffffffffffffffff1660408201526060015260808d015f905260a08d015260c08c015273ffffffffffffffffffffffffffffffffffffffff8a1660e08c01526101008b01526101208a01525f5b60208a015160c08b015160e08c01519060408d01518d606081015161010082015115159060a08301519261012001519360405196879660208801998a5260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016604088015260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016605487015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606886015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016607085015260f81b6078840152607983015280516020819201609984015e81018460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166099820152036099017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48101825260040161288990826113ba565b519020805f52600460205260405f2054156128ad575060010163ffffffff16612728565b91979d99939b929895949c9050999599818452815f52600460205260405f2084518155602085015160018201556129b36002820167ffffffffffffffff80604089015116167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617815560608701517fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b16911617815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085810151600383015560c08601516004830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560e08701516005840180546101008a01517fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791151590921b74ff00000000000000000000000000000000000000001617905561012085015180519067ffffffffffffffff821161131c57612a886006840154611568565b601f8111612c13575b50909e9f9e8994939291602090601f8311600114612ba557600692915f9183612b9a575b50505f198260011b9260031b1c1916179101555b8d8c8c606084015180612b6f575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612b09848660019e61202a83612b219a61150a565b50612b198460a08901519261150a565b52015161150a565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff891693a401939190612622565b92505050612b8a9193505f52600460205260405f2054151590565b156120e35786918d8c8c5f612ad7565b015190505f80612ab5565b90600684015f52805f20915f5b601f1985168110612bf8575091839160019383601f196006971610612be0575b505050811b01910155612ac9565b01515f1960f88460031b161c191690555f8080612bd2565b8183015184558d985060019093019260209283019201612bb2565b600684015f5260205f20601f840160051c810160208510612c50575b601f830160051c82018110612c45575050612a91565b5f8155600101612c2f565b5080612c2f565b5060408c01511515612684565b7f08e8b937000000000000000000000000000000000000000000000000000000005f5260045ffd5b905067ffffffffffffffff421610155f612673565b612cb69193503d805f833e61212081836113ba565b915f612600565b9290949391612cca612549565b50855193612cd6612549565b94612ce08161197f565b6020870152604051907fa2ea7c6e0000000000000000000000000000000000000000000000000000000082528260048301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561212f575f92613417575b508151156120bb5792979091612d7384611dcd565b98612d7d8561197f565b945f935b818510612d995750505050509561263c949596613c67565b91959398949699909297612dad8a8461150a565b519a60208c019867ffffffffffffffff8a51168015159081613402575b50612c6457604081015115806133f5575b61206b578a998d6060810151915167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612e298261139d565b5f825260208201524267ffffffffffffffff166040820152606001528d608081015f905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b01525f5b60208b015160c08c015160e08d0151908d604081015190606081015161010082015115159060a08301519261012001519360405196879660208801998a5260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016604088015260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016605487015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606886015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016607085015260f81b6078840152607983015280516020819201609984015e81018460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166099820152036099017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe481018252600401612fe290826113ba565b519020805f52600460205260405f205415613006575060010163ffffffff16612e80565b90509d979b9199929a949d9c909698939c808452805f52600460205260405f2091845183556020850151600184015561310e6002840167ffffffffffffffff80604089015116167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617815560608701517fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b16911617815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a0850151600384015573ffffffffffffffffffffffffffffffffffffffff60c08601511673ffffffffffffffffffffffffffffffffffffffff6004850191167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff8060e088015116167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617815561010086015115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff000000000000000000000000000000000000000083549260a01b16911617905561012085015192835167ffffffffffffffff811161131c57889461322f6006840154611568565b601f811161339d575b50602090601f831160011461332f57600692915f9183613324575b50505f198260011b9260031b1c1916179101555b8d8b8b6060840151806132f9575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612b09848660019e61202a836132a79a61150a565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a40193949a92909192612d81565b925050506133149193505f52600460205260405f2054151590565b156120e35785918d8b8b5f613275565b015190505f80613253565b90600684015f52805f20915f5b601f1985168110613382575091839160019383601f19600697161061336a575b505050811b01910155613267565b01515f1960f88460031b161c191690555f808061335c565b8183015184558c98506001909301926020928301920161333c565b90919293949550600684015f5260205f20601f840160051c8101602085106133ee575b908b979695949392915b601f830160051c820181106133e0575050613238565b5f81558c98506001016133ca565b50806133c0565b5060408d01511515612ddb565b905067ffffffffffffffff421610155f612dca565b61342c9192503d805f833e61212081836113ba565b905f612d5e565b9061343d9061197f565b905f8151915f5b838110613452575050505090565b61345c818361150a565b5180515f915b81831061347457505050600101613444565b90919460018091613485888561150a565b51613490828c61150a565b520195019190613462565b90815f52600560205267ffffffffffffffff60405f20541661351f5767ffffffffffffffff90825f52600560205260405f208282167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905516907f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f5f80a3565b7f2e267946000000000000000000000000000000000000000000000000000000005f5260045ffd5b805f917a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008210156136a4575b806d04ee2d6d415b85acef8100000000600a921015613689575b662386f26fc10000811015613675575b6305f5e100811015613664575b612710811015613655575b6064811015613647575b101561363c575b600a5f1960216001850194601f196135f16135db88611659565b976135e9604051998a6113ba565b808952611659565b013660208801378501015b01917f30313233343536373839616263646566000000000000000000000000000000008282061a8353048015613637575f19600a91926135fc565b505090565b6001909101906135c1565b6064600291049301926135ba565b612710600491049301926135b0565b6305f5e100600891049301926135a5565b662386f26fc1000060109104930192613598565b6d04ee2d6d415b85acef810000000060209104930192613588565b50604091507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000810461356e565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806137cc575b15613734577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526137c660c0826113ba565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461370b565b6042906138006136cc565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9190823b6138ab579061384891613f43565b50600481101561387e5715918261385e57505090565b73ffffffffffffffffffffffffffffffffffffffff919250811691161490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b915f926138fa613908859460405192839160208301957f1626ba7e000000000000000000000000000000000000000000000000000000008752602484015260406044840152606483019061112a565b03601f1981018352826113ba565b51915afa613914613f14565b8161395b575b81613923575090565b90506020818051810103126101b457602001517f1626ba7e000000000000000000000000000000000000000000000000000000001490565b90506020815110159061391a565b929160408401936040815282518095526060810194602060608260051b8401019401905f5b8181106139ab575050506112bd93945060208184039101526111cc565b9091946020806139e5837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08860019603018c5289516111ff565b9701980191019691909661398e565b93919080519460018614613c41576020015173ffffffffffffffffffffffffffffffffffffffff16908115613c02575f956040517fce46e046000000000000000000000000000000000000000000000000000000008152602081600481875afa90811561212f575f91613bc8575b50905f915b818310613b3a5750505091602091613aaf93876040518096819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613969565b03925af190811561212f575f91613b00575b5015613ad857613acf575090565b6112bd906141db565b7fbf2f3a8b000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d602011613b32575b81613b1b602093836113ba565b810103126101b457613b2c90611cdd565b5f613ac1565b3d9150613b0e565b90919796613b48898761150a565b518015613bbd578215613b9557818111613b6d5780600192039801985b019190613a67565b7f11011294000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f1574f9f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b509697600190613b65565b90506020813d602011613bfa575b81613be3602093836113ba565b810103126101b457613bf490611cdd565b5f613a62565b3d9150613bd6565b50505f939192935b828110613c2a57505050613c1d57505f90565b613c26906141db565b5f90565b613c34818361150a565b51613b9557600101613c0a565b906112bd955091613c60613c596001949695966114fd565b51916114fd565b5191613f7d565b93919080519460018614613e4e576020015173ffffffffffffffffffffffffffffffffffffffff16908115613e1c575f956040517fce46e046000000000000000000000000000000000000000000000000000000008152602081600481875afa90811561212f575f91613de2575b50905f915b818310613da45750505091602091613d2293876040518096819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613969565b03925af190811561212f575f91613d6a575b5015613d4257613acf575090565b7fe8bee839000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d602011613d9c575b81613d85602093836113ba565b810103126101b457613d9690611cdd565b5f613d34565b3d9150613d78565b90919796613db2898761150a565b518015613dd7578215613b9557818111613b6d5780600192039801985b019190613cda565b509697600190613dcf565b90506020813d602011613e14575b81613dfd602093836113ba565b810103126101b457613e0e90611cdd565b5f613cd5565b3d9150613df0565b50505f939192935b828110613e3757505050613c1d57505f90565b613e41818361150a565b51613b9557600101613e24565b906112bd955091613c60613c595f949695966114fd565b60ff8114613ec45760ff811690601f8211613e9c5760405191613e896040846113ba565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040516112bd81613ed6815f6115b9565b03826113ba565b60ff8114613f015760ff811690601f8211613e9c5760405191613e896040846113ba565b506040516112bd81613ed68160016115b9565b3d15613f3e573d90613f2582611659565b91613f3360405193846113ba565b82523d5f602084013e565b606090565b8151919060418303613f7357613f6c9250602082015190606060408401519301515f1a90614269565b9192909190565b50505f9160029190565b60200151919492909173ffffffffffffffffffffffffffffffffffffffff169081156141c9579085929183614133575b60209291901561407a57613ff7916040519485809481937fe49617e100000000000000000000000000000000000000000000000000000000835287600484015260248301906111ff565b03925af190811561212f575f91614040575b5015614018575b613acf575090565b7fccf3bb27000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d602011614072575b8161405b602093836113ba565b810103126101b45761406c90611cdd565b5f614009565b3d915061404e