craft-nft

A standalone NFT implementation for real-world arts and crafts assets
Log | Files | Refs | README

commit ef36eeb574cac50e0007ee860a5f577e77e8ef69
parent e1e3b1b9fa021214e69ce526d31b34bd21715c08
Author: lash <dev@holbrook.no>
Date:   Wed, 22 Feb 2023 18:05:50 +0000

Add immediate cap alternative

Diffstat:
Mjs/contract/CraftNFT.bin | 4++--
Mpython/craft_nft/data/CraftNFT.bin | 4++--
Mpython/tests/test_basic.py | 30++++++++++++++++++++++++++++++
Msolidity/CraftNFT.sol | 9++++++++-
4 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/js/contract/CraftNFT.bin b/js/contract/CraftNFT.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b5060405162004e3238038062004e32833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b8190555082600890816200008f919062000564565b508160099081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b6147d7806200065b6000396000f3fe60806040526004361061020b576000357c01000000000000000000000000000000000000000000000000000000009004806370a082311161012a578063c6eba7c4116100bd578063da2824a81161008c578063da2824a8146107a0578063e985e9c5146107c9578063f117e17314610806578063f70a3de814610843578063f9613ab2146108805761020b565b8063c6eba7c4146106c0578063c87b56dd146106e9578063c9796c3914610726578063d824ee4f146107635761020b565b8063adf288df116100f9578063adf288df146105ff578063b1a6afd31461063c578063b242e53414610667578063b88d4fde146106a45761020b565b806370a08231146105435780638da5cb5b1461058057806395d89b41146105ab578063a22cb465146105d65761020b565b806340c84b0e116101a2578063559f5dc911610171578063559f5dc9146104605780635ae06f7e146104a05780636352211e146104c957806369e85c71146105065761020b565b806340c84b0e146103b357806342842e0e146103de57806349f2553a146103fa5780634f64b2be146104235761020b565b806323b872dd116101de57806323b872dd146102e057806324e0febc146102fc5780632b29ba23146103395780633fd2f593146103765761020b565b806301ffc9a71461021057806306fdde031461024d578063081812fc1461027857806318160ddd146102b5575b600080fd5b34801561021c57600080fd5b50610237600480360381019061023291906136e7565b6108bd565b604051610244919061372f565b60405180910390f35b34801561025957600080fd5b50610262610a11565b60405161026f91906137da565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a9190613832565b610a9f565b6040516102ac91906138a0565b60405180910390f35b3480156102c157600080fd5b506102ca610adc565b6040516102d791906138ca565b60405180910390f35b6102fa60048036038101906102f59190613911565b610ae6565b005b34801561030857600080fd5b50610323600480360381019061031e919061399a565b610b51565b60405161033091906139d6565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906139f1565b610b69565b60405161036d919061372f565b60405180910390f35b34801561038257600080fd5b5061039d6004803603810190610398919061399a565b610c15565b6040516103aa9190613a73565b60405180910390f35b3480156103bf57600080fd5b506103c8610f74565b6040516103d59190613a73565b60405180910390f35b6103f860048036038101906103f39190613911565b611002565b005b34801561040657600080fd5b50610421600480360381019061041c9190613bca565b61106d565b005b34801561042f57600080fd5b5061044a60048036038101906104459190613832565b611385565b60405161045791906139d6565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190613c13565b6113a9565b6040516104979493929190613c74565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c291906139f1565b611430565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190613832565b61154f565b6040516104fd91906138a0565b60405180910390f35b34801561051257600080fd5b5061052d6004803603810190610528919061399a565b61158b565b60405161053a91906137da565b60405180910390f35b34801561054f57600080fd5b5061056a600480360381019061056591906139f1565b6117a4565b60405161057791906138ca565b60405180910390f35b34801561058c57600080fd5b506105956117ed565b6040516105a291906138a0565b60405180910390f35b3480156105b757600080fd5b506105c0611811565b6040516105cd91906137da565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613ce5565b61189f565b005b34801561060b57600080fd5b5061062660048036038101906106219190613d25565b611b41565b60405161063391906139d6565b60405180910390f35b34801561064857600080fd5b50610651611db3565b60405161065e91906139d6565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613ce5565b611db9565b60405161069b919061372f565b60405180910390f35b6106be60048036038101906106b99190613e06565b611e9a565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190613eef565b611f75565b005b3480156106f557600080fd5b50610710600480360381019061070b9190613832565b612103565b60405161071d91906137da565b60405180910390f35b34801561073257600080fd5b5061074d6004803603810190610748919061399a565b612175565b60405161075a91906137da565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613f42565b61256f565b60405161079791906139d6565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906139f1565b612814565b005b3480156107d557600080fd5b506107f060048036038101906107eb9190613f95565b6128fc565b6040516107fd919061372f565b60405180910390f35b34801561081257600080fd5b5061082d60048036038101906108289190613fd5565b612994565b60405161083a91906139d6565b60405180910390f35b34801561084f57600080fd5b5061086a60048036038101906108659190614075565b612b23565b604051610877919061372f565b60405180910390f35b34801561088c57600080fd5b506108a760048036038101906108a2919061399a565b612e90565b6040516108b491906139d6565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109115760019050610a0c565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109635760019050610a0c565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109b55760019050610a0c565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a075760019050610a0c565b600090505b919050565b60088054610a1e906140e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4a906140e4565b8015610a975780601f10610a6c57610100808354040283529160200191610a97565b820191906000526020600020905b815481529060010190602001808311610a7a57829003601f168201915b505050505081565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a54905090565b610af1838383612f3c565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610c0e575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b606080600080604067ffffffffffffffff811115610c3657610c35613a9f565b5b6040519080825280601f01601f191660200182016040528015610c685781602001600182028036833780820191505090505b5092506000905060005b6020811015610f6857600460f0878360208110610c9257610c91614115565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015610d6a57603083610d019190614180565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d3657610d35614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610ddc565b605783610d779190614180565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610dac57610dab614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110610df157610df0614115565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015610ec857603083610e539190614180565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610e8391906141b5565b81518110610e9457610e93614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610f46565b605783610ed59190614180565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610f0591906141b5565b81518110610f1657610f15614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282610f5391906141b5565b91508080610f60906141e9565b915050610c72565b50829350505050919050565b600c8054610f81906140e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610fad906140e4565b8015610ffa5780601f10610fcf57610100808354040283529160200191610ffa565b820191906000526020600020905b815481529060010190602001808311610fdd57829003601f168201915b505050505081565b61100d838383612f3c565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110ca57600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836111039190614231565b8151811061111457611113614115565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611194578080611190906141e9565b9150505b8067ffffffffffffffff8111156111ae576111ad613a9f565b5b6040519080825280601f01601f1916602001820160405280156111e05781602001600182028036833780820191505090505b50600c90816111ef9190614417565b5060005b82518110156112e05782818151811061120f5761120e614115565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600c828154611267906140e4565b811061127657611275614115565b5b8154600116156112955790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555080806112d8906141e9565b9150506111f3565b5081518114611380577f2f00000000000000000000000000000000000000000000000000000000000000600c83518154611319906140e4565b811061132857611327614115565b5b8154600116156113475790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b6003818154811061139557600080fd5b906000526020600020016000915090505481565b600460205281600052604060002081815481106113c557600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff169080600001600d9054906101000a900460ff16905084565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114b5575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb90614535565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061159b85610c15565b9150600c80546115aa906140e4565b905090508082516115bb91906141b5565b67ffffffffffffffff8111156115d4576115d3613a9f565b5b6040519080825280601f01601f1916602001820160405280156116065781602001600182028036833780820191505090505b50925060005b818110156116cb57600c818154611622906140e4565b811061163157611630614115565b5b8154600116156116505790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000284828151811061168957611688614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806116c3906141e9565b91505061160c565b5060005b8251811015611798578281815181106116eb576116ea614115565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061174857611747614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611782906141e9565b9250508080611790906141e9565b9150506116cf565b50829350505050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6009805461181e906140e4565b80601f016020809104026020016040519081016040528092919081815260200182805461184a906140e4565b80156118975780601f1061186c57610100808354040283529160200191611897565b820191906000526020600020905b81548152906001019060200180831161187a57829003601f168201915b505050505081565b80156119c057600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193d57600080fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611ad8565b600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a5857600080fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b35919061372f565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611be75750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611bf057600080fd5b6001600460008581526020019081526020016000208054905014611c1357600080fd5b600060046000858152602001908152602001600020600081548110611c3b57611c3a614115565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1614611c6d57600080fd5b6000600102600560008581526020019081526020016000205414611c9057600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260056000858152602001908152602001600020819055506001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d3991906141b5565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560019004604051611da191906138ca565b60405180910390a38291505092915050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e1457600080fd5b600260009054906101000a900460ff1615611e2e57600080fd5b8115611e50576001600260006101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b611ea5848484612f3c565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e84611f5a9061457a565b604051611f6791906139d6565b60405180910390a450505050565b6000600460008581526020019081526020016000208361ffff1681548110611fa057611f9f614115565b5b90600052602060002001905080600001600c9054906101000a900460ff1615611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff59061462d565b60405180910390fd5b80600001600d9054906101000a900460ff1615612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790614699565b60405180910390fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168265ffffffffffff1610156120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090614705565b60405180910390fd5b818160000160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550600181600001600d6101000a81548160ff02191690831515021790555050505050565b60606000826001029050600060046000838152602001908152602001600020805490500361213e5761213481612e90565b9050806001900492505b600060046000838152602001908152602001600020805490501161216157600080fd5b61216d8360010261158b565b915050919050565b6060806060600061218585610c15565b9150604767ffffffffffffffff8111156121a2576121a1613a9f565b5b6040519080825280601f01601f1916602001820160405280156121d45781602001600182028036833780820191505090505b5092507f73000000000000000000000000000000000000000000000000000000000000008360008151811061220c5761220b614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6800000000000000000000000000000000000000000000000000000000000000836001815181106122705761226f614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106122d4576122d3614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f32000000000000000000000000000000000000000000000000000000000000008360038151811061233857612337614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f35000000000000000000000000000000000000000000000000000000000000008360048151811061239c5761239b614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f360000000000000000000000000000000000000000000000000000000000000083600581518110612400576123ff614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a000000000000000000000000000000000000000000000000000000000000008360068151811061246457612463614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b6040811015612563578281815181106124b6576124b5614115565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061251357612512614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818061254d906141e9565b925050808061255b906141e9565b91505061249a565b50829350505050919050565b600080600460008581526020019081526020016000208361ffff168154811061259b5761259a614115565b5b90600052602060002001905080600001600c9054906101000a900460ff16156125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f09061462d565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061269c5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d290614535565b60405180910390fd5b60008361ffff1614801561270d575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b8015612727575080600001600d9054906101000a900460ff165b156127865760018160000160068282829054906101000a900465ffffffffffff166127529190614725565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555061277e8585611b41565b91505061280d565b80600001600d9054906101000a900460ff16156127e6578060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff16106127e557600080fd5b5b6128098585858460000160069054906101000a900465ffffffffffff1685613253565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289990614535565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008173ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff16815481106129c0576129bf614115565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612a6f5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa590614535565b60405180910390fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612ad957600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610612b0b57600080fd5b612b188686868685613253565b915050949350505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612bc95750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bff90614535565b60405180910390fd5b612c1061363f565b600460008681526020019081526020016000208054905091506000821115612c8d57600060046000878152602001908152602001600020600081548110612c5a57612c59614115565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612c8c57600080fd5b5b60008460050b03612cc85760018160600190151590811515815250506001600a6000828254612cbc91906141b5565b92505081905550612d28565b60008460050b1315612d275783816000019065ffffffffffff16908165ffffffffffff16815250506001816060019015159081151581525050806000015165ffffffffffff16600a6000828254612d1f91906141b5565b925050819055505b5b60046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff021916908315150217905550606082015181600001600d6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505580606001511515816000015165ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f77d96978d8b40ac826d1984d992e71a84672e62d825fda78cd646656481d065b88604051612e7c91906139d6565b60405180910390a460019250505092915050565b60008060056000848152602001908152602001600020549050612eb28161354a565b612ebb57600080fd5b612ec48161357c565b15612ed25782915050612f37565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f9391906138ca565b602060405180830381865afa158015612fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd49190614774565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461300e57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613142573373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061313857503373ffffffffffffffffffffffffffffffffffffffff16600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61314157600080fd5b5b60006006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061319f82846135ae565b6001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131ef9190614231565b925050819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324691906141b5565b9250508190555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff168317925082600102905060006001026005600083815260200190815260200160002054146132e657600080fd5b84600001600c9054906101000a900460ff16613348578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff161461334757600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff166133c99190614725565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555084600001600d9054906101000a900460ff166134645760018560000160008282829054906101000a900465ffffffffffff166134279190614725565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506001600a600082825461345c91906141b5565b925050819055505b8160010260056000838152602001908152602001600020819055506001600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134cf91906141b5565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560405161353391906138ca565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000808360010290506005600082815260200190815260200160002054600190049150600082036135de57600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136c48161368f565b81146136cf57600080fd5b50565b6000813590506136e1816136bb565b92915050565b6000602082840312156136fd576136fc613685565b5b600061370b848285016136d2565b91505092915050565b60008115159050919050565b61372981613714565b82525050565b60006020820190506137446000830184613720565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613784578082015181840152602081019050613769565b60008484015250505050565b6000601f19601f8301169050919050565b60006137ac8261374a565b6137b68185613755565b93506137c6818560208601613766565b6137cf81613790565b840191505092915050565b600060208201905081810360008301526137f481846137a1565b905092915050565b6000819050919050565b61380f816137fc565b811461381a57600080fd5b50565b60008135905061382c81613806565b92915050565b60006020828403121561384857613847613685565b5b60006138568482850161381d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061388a8261385f565b9050919050565b61389a8161387f565b82525050565b60006020820190506138b56000830184613891565b92915050565b6138c4816137fc565b82525050565b60006020820190506138df60008301846138bb565b92915050565b6138ee8161387f565b81146138f957600080fd5b50565b60008135905061390b816138e5565b92915050565b60008060006060848603121561392a57613929613685565b5b6000613938868287016138fc565b9350506020613949868287016138fc565b925050604061395a8682870161381d565b9150509250925092565b6000819050919050565b61397781613964565b811461398257600080fd5b50565b6000813590506139948161396e565b92915050565b6000602082840312156139b0576139af613685565b5b60006139be84828501613985565b91505092915050565b6139d081613964565b82525050565b60006020820190506139eb60008301846139c7565b92915050565b600060208284031215613a0757613a06613685565b5b6000613a15848285016138fc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000613a4582613a1e565b613a4f8185613a29565b9350613a5f818560208601613766565b613a6881613790565b840191505092915050565b60006020820190508181036000830152613a8d8184613a3a565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ad782613790565b810181811067ffffffffffffffff82111715613af657613af5613a9f565b5b80604052505050565b6000613b0961367b565b9050613b158282613ace565b919050565b600067ffffffffffffffff821115613b3557613b34613a9f565b5b613b3e82613790565b9050602081019050919050565b82818337600083830152505050565b6000613b6d613b6884613b1a565b613aff565b905082815260208101848484011115613b8957613b88613a9a565b5b613b94848285613b4b565b509392505050565b600082601f830112613bb157613bb0613a95565b5b8135613bc1848260208601613b5a565b91505092915050565b600060208284031215613be057613bdf613685565b5b600082013567ffffffffffffffff811115613bfe57613bfd61368a565b5b613c0a84828501613b9c565b91505092915050565b60008060408385031215613c2a57613c29613685565b5b6000613c3885828601613985565b9250506020613c498582860161381d565b9150509250929050565b600065ffffffffffff82169050919050565b613c6e81613c53565b82525050565b6000608082019050613c896000830187613c65565b613c966020830186613c65565b613ca36040830185613720565b613cb06060830184613720565b95945050505050565b613cc281613714565b8114613ccd57600080fd5b50565b600081359050613cdf81613cb9565b92915050565b60008060408385031215613cfc57613cfb613685565b5b6000613d0a858286016138fc565b9250506020613d1b85828601613cd0565b9150509250929050565b60008060408385031215613d3c57613d3b613685565b5b6000613d4a858286016138fc565b9250506020613d5b85828601613985565b9150509250929050565b600067ffffffffffffffff821115613d8057613d7f613a9f565b5b613d8982613790565b9050602081019050919050565b6000613da9613da484613d65565b613aff565b905082815260208101848484011115613dc557613dc4613a9a565b5b613dd0848285613b4b565b509392505050565b600082601f830112613ded57613dec613a95565b5b8135613dfd848260208601613d96565b91505092915050565b60008060008060808587031215613e2057613e1f613685565b5b6000613e2e878288016138fc565b9450506020613e3f878288016138fc565b9350506040613e508782880161381d565b925050606085013567ffffffffffffffff811115613e7157613e7061368a565b5b613e7d87828801613dd8565b91505092959194509250565b600061ffff82169050919050565b613ea081613e89565b8114613eab57600080fd5b50565b600081359050613ebd81613e97565b92915050565b613ecc81613c53565b8114613ed757600080fd5b50565b600081359050613ee981613ec3565b92915050565b600080600060608486031215613f0857613f07613685565b5b6000613f1686828701613985565b9350506020613f2786828701613eae565b9250506040613f3886828701613eda565b9150509250925092565b600080600060608486031215613f5b57613f5a613685565b5b6000613f69868287016138fc565b9350506020613f7a86828701613985565b9250506040613f8b86828701613eae565b9150509250925092565b60008060408385031215613fac57613fab613685565b5b6000613fba858286016138fc565b9250506020613fcb858286016138fc565b9150509250929050565b60008060008060808587031215613fef57613fee613685565b5b6000613ffd878288016138fc565b945050602061400e87828801613985565b935050604061401f87828801613eae565b925050606061403087828801613eda565b91505092959194509250565b60008160050b9050919050565b6140528161403c565b811461405d57600080fd5b50565b60008135905061406f81614049565b92915050565b6000806040838503121561408c5761408b613685565b5b600061409a85828601613985565b92505060206140ab85828601614060565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140fc57607f821691505b60208210810361410f5761410e6140b5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061418b82614144565b915061419683614144565b9250828201905060ff8111156141af576141ae614151565b5b92915050565b60006141c0826137fc565b91506141cb836137fc565b92508282019050808211156141e3576141e2614151565b5b92915050565b60006141f4826137fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361422657614225614151565b5b600182019050919050565b600061423c826137fc565b9150614247836137fc565b925082820390508181111561425f5761425e614151565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026142ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261428a565b6142d4868361428a565b95508019841693508086168417925050509392505050565b6000819050919050565b600061431161430c614307846137fc565b6142ec565b6137fc565b9050919050565b6000819050919050565b61432b836142f6565b61433f61433782614318565b84845461429a565b825550505050565b600090565b614354614347565b61435f818484614322565b505050565b5b818110156143835761437860008261434c565b600181019050614365565b5050565b601f8211156143c85761439981614265565b6143a28461427a565b810160208510156143b1578190505b6143c56143bd8561427a565b830182614364565b50505b505050565b60008160020a8304905092915050565b60006143ee600019846008026143cd565b1980831691505092915050565b600061440783836143dd565b9150826002028217905092915050565b61442082613a1e565b67ffffffffffffffff81111561443957614438613a9f565b5b61444382546140e4565b61444e828285614387565b600060209050601f831160018114614481576000841561446f578287015190505b61447985826143fb565b8655506144e1565b601f19841661448f86614265565b60005b828110156144b757848901518255600182019150602085019450602081019050614492565b868310156144d457848901516144d0601f8916826143dd565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b600061451f600a83613755565b915061452a826144e9565b602082019050919050565b6000602082019050818103600083015261454e81614512565b9050919050565b6000819050602082019050919050565b60006145718251613964565b80915050919050565b600061458582613a1e565b8261458f84614555565b905061459a81614565565b925060208210156145da576145d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080261428a565b831692505b5050919050565b7f4552525f53504152534500000000000000000000000000000000000000000000600082015250565b6000614617600a83613755565b9150614622826145e1565b602082019050919050565b600060208201905081810360008301526146468161460a565b9050919050565b7f4552525f43415050454400000000000000000000000000000000000000000000600082015250565b6000614683600a83613755565b915061468e8261464d565b602082019050919050565b600060208201905081810360008301526146b281614676565b9050919050565b7f4552525f4341505f4c4f57000000000000000000000000000000000000000000600082015250565b60006146ef600b83613755565b91506146fa826146b9565b602082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b600061473082613c53565b915061473b83613c53565b9250828201905065ffffffffffff81111561475957614758614151565b5b92915050565b60008151905061476e816138e5565b92915050565b60006020828403121561478a57614789613685565b5b60006147988482850161475f565b9150509291505056fea26469706673582212209832c65cee22fc017db822d90ff9954969b15c3a4cea7123bdd545203784fe5564736f6c63430008120033 -\ No newline at end of file +60806040523480156200001157600080fd5b5060405162004e7738038062004e77833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b8190555082600890816200008f919062000564565b508160099081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b61481c806200065b6000396000f3fe60806040526004361061020b576000357c01000000000000000000000000000000000000000000000000000000009004806370a082311161012a578063c6eba7c4116100bd578063da2824a81161008c578063da2824a8146107a0578063e985e9c5146107c9578063f117e17314610806578063f70a3de814610843578063f9613ab2146108805761020b565b8063c6eba7c4146106c0578063c87b56dd146106e9578063c9796c3914610726578063d824ee4f146107635761020b565b8063adf288df116100f9578063adf288df146105ff578063b1a6afd31461063c578063b242e53414610667578063b88d4fde146106a45761020b565b806370a08231146105435780638da5cb5b1461058057806395d89b41146105ab578063a22cb465146105d65761020b565b806340c84b0e116101a2578063559f5dc911610171578063559f5dc9146104605780635ae06f7e146104a05780636352211e146104c957806369e85c71146105065761020b565b806340c84b0e146103b357806342842e0e146103de57806349f2553a146103fa5780634f64b2be146104235761020b565b806323b872dd116101de57806323b872dd146102e057806324e0febc146102fc5780632b29ba23146103395780633fd2f593146103765761020b565b806301ffc9a71461021057806306fdde031461024d578063081812fc1461027857806318160ddd146102b5575b600080fd5b34801561021c57600080fd5b506102376004803603810190610232919061372c565b6108bd565b6040516102449190613774565b60405180910390f35b34801561025957600080fd5b50610262610a11565b60405161026f919061381f565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a9190613877565b610a9f565b6040516102ac91906138e5565b60405180910390f35b3480156102c157600080fd5b506102ca610adc565b6040516102d7919061390f565b60405180910390f35b6102fa60048036038101906102f59190613956565b610ae6565b005b34801561030857600080fd5b50610323600480360381019061031e91906139df565b610b51565b6040516103309190613a1b565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613a36565b610b69565b60405161036d9190613774565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906139df565b610c15565b6040516103aa9190613ab8565b60405180910390f35b3480156103bf57600080fd5b506103c8610f74565b6040516103d59190613ab8565b60405180910390f35b6103f860048036038101906103f39190613956565b611002565b005b34801561040657600080fd5b50610421600480360381019061041c9190613c0f565b61106d565b005b34801561042f57600080fd5b5061044a60048036038101906104459190613877565b611385565b6040516104579190613a1b565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190613c58565b6113a9565b6040516104979493929190613cb9565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190613a36565b611430565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190613877565b61154f565b6040516104fd91906138e5565b60405180910390f35b34801561051257600080fd5b5061052d600480360381019061052891906139df565b61158b565b60405161053a919061381f565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190613a36565b6117a4565b604051610577919061390f565b60405180910390f35b34801561058c57600080fd5b506105956117ed565b6040516105a291906138e5565b60405180910390f35b3480156105b757600080fd5b506105c0611811565b6040516105cd919061381f565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613d2a565b61189f565b005b34801561060b57600080fd5b5061062660048036038101906106219190613d6a565b611b41565b6040516106339190613a1b565b60405180910390f35b34801561064857600080fd5b50610651611db3565b60405161065e9190613a1b565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613d2a565b611db9565b60405161069b9190613774565b60405180910390f35b6106be60048036038101906106b99190613e4b565b611e9a565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190613f34565b611f75565b005b3480156106f557600080fd5b50610710600480360381019061070b9190613877565b61212d565b60405161071d919061381f565b60405180910390f35b34801561073257600080fd5b5061074d600480360381019061074891906139df565b61219f565b60405161075a919061381f565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613f87565b612599565b6040516107979190613a1b565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190613a36565b61283e565b005b3480156107d557600080fd5b506107f060048036038101906107eb9190613fda565b612926565b6040516107fd9190613774565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061401a565b6129be565b60405161083a9190613a1b565b60405180910390f35b34801561084f57600080fd5b5061086a600480360381019061086591906140ba565b612b68565b6040516108779190613774565b60405180910390f35b34801561088c57600080fd5b506108a760048036038101906108a291906139df565b612ed5565b6040516108b49190613a1b565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109115760019050610a0c565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109635760019050610a0c565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109b55760019050610a0c565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a075760019050610a0c565b600090505b919050565b60088054610a1e90614129565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4a90614129565b8015610a975780601f10610a6c57610100808354040283529160200191610a97565b820191906000526020600020905b815481529060010190602001808311610a7a57829003601f168201915b505050505081565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a54905090565b610af1838383612f81565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610c0e575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b606080600080604067ffffffffffffffff811115610c3657610c35613ae4565b5b6040519080825280601f01601f191660200182016040528015610c685781602001600182028036833780820191505090505b5092506000905060005b6020811015610f6857600460f0878360208110610c9257610c9161415a565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015610d6a57603083610d0191906141c5565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d3657610d3561415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610ddc565b605783610d7791906141c5565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610dac57610dab61415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110610df157610df061415a565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015610ec857603083610e5391906141c5565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610e8391906141fa565b81518110610e9457610e9361415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610f46565b605783610ed591906141c5565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610f0591906141fa565b81518110610f1657610f1561415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282610f5391906141fa565b91508080610f609061422e565b915050610c72565b50829350505050919050565b600c8054610f8190614129565b80601f0160208091040260200160405190810160405280929190818152602001828054610fad90614129565b8015610ffa5780601f10610fcf57610100808354040283529160200191610ffa565b820191906000526020600020905b815481529060010190602001808311610fdd57829003601f168201915b505050505081565b61100d838383612f81565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110ca57600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836111039190614276565b815181106111145761111361415a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146111945780806111909061422e565b9150505b8067ffffffffffffffff8111156111ae576111ad613ae4565b5b6040519080825280601f01601f1916602001820160405280156111e05781602001600182028036833780820191505090505b50600c90816111ef919061445c565b5060005b82518110156112e05782818151811061120f5761120e61415a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600c82815461126790614129565b81106112765761127561415a565b5b8154600116156112955790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555080806112d89061422e565b9150506111f3565b5081518114611380577f2f00000000000000000000000000000000000000000000000000000000000000600c8351815461131990614129565b81106113285761132761415a565b5b8154600116156113475790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b6003818154811061139557600080fd5b906000526020600020016000915090505481565b600460205281600052604060002081815481106113c557600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff169080600001600d9054906101000a900460ff16905084565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114b5575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb9061457a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061159b85610c15565b9150600c80546115aa90614129565b905090508082516115bb91906141fa565b67ffffffffffffffff8111156115d4576115d3613ae4565b5b6040519080825280601f01601f1916602001820160405280156116065781602001600182028036833780820191505090505b50925060005b818110156116cb57600c81815461162290614129565b81106116315761163061415a565b5b8154600116156116505790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000028482815181106116895761168861415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806116c39061422e565b91505061160c565b5060005b8251811015611798578281815181106116eb576116ea61415a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106117485761174761415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806117829061422e565b92505080806117909061422e565b9150506116cf565b50829350505050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6009805461181e90614129565b80601f016020809104026020016040519081016040528092919081815260200182805461184a90614129565b80156118975780601f1061186c57610100808354040283529160200191611897565b820191906000526020600020905b81548152906001019060200180831161187a57829003601f168201915b505050505081565b80156119c057600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193d57600080fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611ad8565b600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a5857600080fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b359190613774565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611be75750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611bf057600080fd5b6001600460008581526020019081526020016000208054905014611c1357600080fd5b600060046000858152602001908152602001600020600081548110611c3b57611c3a61415a565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1614611c6d57600080fd5b6000600102600560008581526020019081526020016000205414611c9057600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260056000858152602001908152602001600020819055506001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d3991906141fa565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560019004604051611da1919061390f565b60405180910390a38291505092915050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e1457600080fd5b600260009054906101000a900460ff1615611e2e57600080fd5b8115611e50576001600260006101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b611ea5848484612f81565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e84611f5a906145bf565b604051611f679190613a1b565b60405180910390a450505050565b6000600460008581526020019081526020016000208361ffff1681548110611fa057611f9f61415a565b5b90600052602060002001905080600001600c9054906101000a900460ff1615611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614672565b60405180910390fd5b80600001600d9054906101000a900460ff1615612050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612047906146de565b60405180910390fd5b60008265ffffffffffff160361207a578060000160069054906101000a900465ffffffffffff1691505b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168265ffffffffffff1610156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da9061474a565b60405180910390fd5b818160000160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550600181600001600d6101000a81548160ff02191690831515021790555050505050565b6060600082600102905060006004600083815260200190815260200160002080549050036121685761215e81612ed5565b9050806001900492505b600060046000838152602001908152602001600020805490501161218b57600080fd5b6121978360010261158b565b915050919050565b606080606060006121af85610c15565b9150604767ffffffffffffffff8111156121cc576121cb613ae4565b5b6040519080825280601f01601f1916602001820160405280156121fe5781602001600182028036833780820191505090505b5092507f7300000000000000000000000000000000000000000000000000000000000000836000815181106122365761223561415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f68000000000000000000000000000000000000000000000000000000000000008360018151811061229a5761229961415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106122fe576122fd61415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3200000000000000000000000000000000000000000000000000000000000000836003815181106123625761236161415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3500000000000000000000000000000000000000000000000000000000000000836004815181106123c6576123c561415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f36000000000000000000000000000000000000000000000000000000000000008360058151811061242a5761242961415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a000000000000000000000000000000000000000000000000000000000000008360068151811061248e5761248d61415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b604081101561258d578281815181106124e0576124df61415a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061253d5761253c61415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806125779061422e565b92505080806125859061422e565b9150506124c4565b50829350505050919050565b600080600460008581526020019081526020016000208361ffff16815481106125c5576125c461415a565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614672565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806126c65750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc9061457a565b60405180910390fd5b60008361ffff16148015612737575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b8015612751575080600001600d9054906101000a900460ff165b156127b05760018160000160068282829054906101000a900465ffffffffffff1661277c919061476a565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506127a88585611b41565b915050612837565b80600001600d9054906101000a900460ff1615612810578060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff161061280f57600080fd5b5b6128338585858460000160069054906101000a900465ffffffffffff1685613298565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c39061457a565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008173ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff16815481106129ea576129e961415a565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612a995750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf9061457a565b60405180910390fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612b0357600080fd5b80600001600d9054906101000a900460ff16612b1e57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610612b5057600080fd5b612b5d8686868685613298565b915050949350505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612c0e5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c449061457a565b60405180910390fd5b612c55613684565b600460008681526020019081526020016000208054905091506000821115612cd257600060046000878152602001908152602001600020600081548110612c9f57612c9e61415a565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612cd157600080fd5b5b60008460050b03612d0d5760018160600190151590811515815250506001600a6000828254612d0191906141fa565b92505081905550612d6d565b60008460050b1315612d6c5783816000019065ffffffffffff16908165ffffffffffff16815250506001816060019015159081151581525050806000015165ffffffffffff16600a6000828254612d6491906141fa565b925050819055505b5b60046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff021916908315150217905550606082015181600001600d6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505580606001511515816000015165ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f77d96978d8b40ac826d1984d992e71a84672e62d825fda78cd646656481d065b88604051612ec19190613a1b565b60405180910390a460019250505092915050565b60008060056000848152602001908152602001600020549050612ef78161358f565b612f0057600080fd5b612f09816135c1565b15612f175782915050612f7c565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612fd8919061390f565b602060405180830381865afa158015612ff5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301991906147b9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461305357600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613187573373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061317d57503373ffffffffffffffffffffffffffffffffffffffff16600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61318657600080fd5b5b60006006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506131e482846135f3565b6001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132349190614276565b925050819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461328b91906141fa565b9250508190555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff1683179250826001029050600060010260056000838152602001908152602001600020541461332b57600080fd5b84600001600c9054906101000a900460ff1661338d578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff161461338c57600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff1661340e919061476a565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555084600001600d9054906101000a900460ff166134a95760018560000160008282829054906101000a900465ffffffffffff1661346c919061476a565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506001600a60008282546134a191906141fa565b925050819055505b8160010260056000838152602001908152602001600020819055506001600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461351491906141fa565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051613578919061390f565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b60008083600102905060056000828152602001908152602001600020546001900491506000820361362357600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613709816136d4565b811461371457600080fd5b50565b60008135905061372681613700565b92915050565b600060208284031215613742576137416136ca565b5b600061375084828501613717565b91505092915050565b60008115159050919050565b61376e81613759565b82525050565b60006020820190506137896000830184613765565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137c95780820151818401526020810190506137ae565b60008484015250505050565b6000601f19601f8301169050919050565b60006137f18261378f565b6137fb818561379a565b935061380b8185602086016137ab565b613814816137d5565b840191505092915050565b6000602082019050818103600083015261383981846137e6565b905092915050565b6000819050919050565b61385481613841565b811461385f57600080fd5b50565b6000813590506138718161384b565b92915050565b60006020828403121561388d5761388c6136ca565b5b600061389b84828501613862565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138cf826138a4565b9050919050565b6138df816138c4565b82525050565b60006020820190506138fa60008301846138d6565b92915050565b61390981613841565b82525050565b60006020820190506139246000830184613900565b92915050565b613933816138c4565b811461393e57600080fd5b50565b6000813590506139508161392a565b92915050565b60008060006060848603121561396f5761396e6136ca565b5b600061397d86828701613941565b935050602061398e86828701613941565b925050604061399f86828701613862565b9150509250925092565b6000819050919050565b6139bc816139a9565b81146139c757600080fd5b50565b6000813590506139d9816139b3565b92915050565b6000602082840312156139f5576139f46136ca565b5b6000613a03848285016139ca565b91505092915050565b613a15816139a9565b82525050565b6000602082019050613a306000830184613a0c565b92915050565b600060208284031215613a4c57613a4b6136ca565b5b6000613a5a84828501613941565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000613a8a82613a63565b613a948185613a6e565b9350613aa48185602086016137ab565b613aad816137d5565b840191505092915050565b60006020820190508181036000830152613ad28184613a7f565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b1c826137d5565b810181811067ffffffffffffffff82111715613b3b57613b3a613ae4565b5b80604052505050565b6000613b4e6136c0565b9050613b5a8282613b13565b919050565b600067ffffffffffffffff821115613b7a57613b79613ae4565b5b613b83826137d5565b9050602081019050919050565b82818337600083830152505050565b6000613bb2613bad84613b5f565b613b44565b905082815260208101848484011115613bce57613bcd613adf565b5b613bd9848285613b90565b509392505050565b600082601f830112613bf657613bf5613ada565b5b8135613c06848260208601613b9f565b91505092915050565b600060208284031215613c2557613c246136ca565b5b600082013567ffffffffffffffff811115613c4357613c426136cf565b5b613c4f84828501613be1565b91505092915050565b60008060408385031215613c6f57613c6e6136ca565b5b6000613c7d858286016139ca565b9250506020613c8e85828601613862565b9150509250929050565b600065ffffffffffff82169050919050565b613cb381613c98565b82525050565b6000608082019050613cce6000830187613caa565b613cdb6020830186613caa565b613ce86040830185613765565b613cf56060830184613765565b95945050505050565b613d0781613759565b8114613d1257600080fd5b50565b600081359050613d2481613cfe565b92915050565b60008060408385031215613d4157613d406136ca565b5b6000613d4f85828601613941565b9250506020613d6085828601613d15565b9150509250929050565b60008060408385031215613d8157613d806136ca565b5b6000613d8f85828601613941565b9250506020613da0858286016139ca565b9150509250929050565b600067ffffffffffffffff821115613dc557613dc4613ae4565b5b613dce826137d5565b9050602081019050919050565b6000613dee613de984613daa565b613b44565b905082815260208101848484011115613e0a57613e09613adf565b5b613e15848285613b90565b509392505050565b600082601f830112613e3257613e31613ada565b5b8135613e42848260208601613ddb565b91505092915050565b60008060008060808587031215613e6557613e646136ca565b5b6000613e7387828801613941565b9450506020613e8487828801613941565b9350506040613e9587828801613862565b925050606085013567ffffffffffffffff811115613eb657613eb56136cf565b5b613ec287828801613e1d565b91505092959194509250565b600061ffff82169050919050565b613ee581613ece565b8114613ef057600080fd5b50565b600081359050613f0281613edc565b92915050565b613f1181613c98565b8114613f1c57600080fd5b50565b600081359050613f2e81613f08565b92915050565b600080600060608486031215613f4d57613f4c6136ca565b5b6000613f5b868287016139ca565b9350506020613f6c86828701613ef3565b9250506040613f7d86828701613f1f565b9150509250925092565b600080600060608486031215613fa057613f9f6136ca565b5b6000613fae86828701613941565b9350506020613fbf868287016139ca565b9250506040613fd086828701613ef3565b9150509250925092565b60008060408385031215613ff157613ff06136ca565b5b6000613fff85828601613941565b925050602061401085828601613941565b9150509250929050565b60008060008060808587031215614034576140336136ca565b5b600061404287828801613941565b9450506020614053878288016139ca565b935050604061406487828801613ef3565b925050606061407587828801613f1f565b91505092959194509250565b60008160050b9050919050565b61409781614081565b81146140a257600080fd5b50565b6000813590506140b48161408e565b92915050565b600080604083850312156140d1576140d06136ca565b5b60006140df858286016139ca565b92505060206140f0858286016140a5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061414157607f821691505b602082108103614154576141536140fa565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141d082614189565b91506141db83614189565b9250828201905060ff8111156141f4576141f3614196565b5b92915050565b600061420582613841565b915061421083613841565b925082820190508082111561422857614227614196565b5b92915050565b600061423982613841565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361426b5761426a614196565b5b600182019050919050565b600061428182613841565b915061428c83613841565b92508282039050818111156142a4576142a3614196565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b60006008830261430f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826142cf565b61431986836142cf565b95508019841693508086168417925050509392505050565b6000819050919050565b600061435661435161434c84613841565b614331565b613841565b9050919050565b6000819050919050565b6143708361433b565b61438461437c8261435d565b8484546142df565b825550505050565b600090565b61439961438c565b6143a4818484614367565b505050565b5b818110156143c8576143bd600082614391565b6001810190506143aa565b5050565b601f82111561440d576143de816142aa565b6143e7846142bf565b810160208510156143f6578190505b61440a614402856142bf565b8301826143a9565b50505b505050565b60008160020a8304905092915050565b600061443360001984600802614412565b1980831691505092915050565b600061444c8383614422565b9150826002028217905092915050565b61446582613a63565b67ffffffffffffffff81111561447e5761447d613ae4565b5b6144888254614129565b6144938282856143cc565b600060209050601f8311600181146144c657600084156144b4578287015190505b6144be8582614440565b865550614526565b601f1984166144d4866142aa565b60005b828110156144fc578489015182556001820191506020850194506020810190506144d7565b868310156145195784890151614515601f891682614422565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000614564600a8361379a565b915061456f8261452e565b602082019050919050565b6000602082019050818103600083015261459381614557565b9050919050565b6000819050602082019050919050565b60006145b682516139a9565b80915050919050565b60006145ca82613a63565b826145d48461459a565b90506145df816145aa565b9250602082101561461f5761461a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026142cf565b831692505b5050919050565b7f4552525f53504152534500000000000000000000000000000000000000000000600082015250565b600061465c600a8361379a565b915061466782614626565b602082019050919050565b6000602082019050818103600083015261468b8161464f565b9050919050565b7f4552525f43415050454400000000000000000000000000000000000000000000600082015250565b60006146c8600a8361379a565b91506146d382614692565b602082019050919050565b600060208201905081810360008301526146f7816146bb565b9050919050565b7f4552525f4341505f4c4f57000000000000000000000000000000000000000000600082015250565b6000614734600b8361379a565b915061473f826146fe565b602082019050919050565b6000602082019050818103600083015261476381614727565b9050919050565b600061477582613c98565b915061478083613c98565b9250828201905065ffffffffffff81111561479e5761479d614196565b5b92915050565b6000815190506147b38161392a565b92915050565b6000602082840312156147cf576147ce6136ca565b5b60006147dd848285016147a4565b9150509291505056fea26469706673582212204402a606b62788763a57212bfd4522efc1020546fedc4efc69b6b1112a3c7b7c64736f6c63430008120033 +\ No newline at end of file diff --git a/python/craft_nft/data/CraftNFT.bin b/python/craft_nft/data/CraftNFT.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b5060405162004e3238038062004e32833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b8190555082600890816200008f919062000564565b508160099081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b6147d7806200065b6000396000f3fe60806040526004361061020b576000357c01000000000000000000000000000000000000000000000000000000009004806370a082311161012a578063c6eba7c4116100bd578063da2824a81161008c578063da2824a8146107a0578063e985e9c5146107c9578063f117e17314610806578063f70a3de814610843578063f9613ab2146108805761020b565b8063c6eba7c4146106c0578063c87b56dd146106e9578063c9796c3914610726578063d824ee4f146107635761020b565b8063adf288df116100f9578063adf288df146105ff578063b1a6afd31461063c578063b242e53414610667578063b88d4fde146106a45761020b565b806370a08231146105435780638da5cb5b1461058057806395d89b41146105ab578063a22cb465146105d65761020b565b806340c84b0e116101a2578063559f5dc911610171578063559f5dc9146104605780635ae06f7e146104a05780636352211e146104c957806369e85c71146105065761020b565b806340c84b0e146103b357806342842e0e146103de57806349f2553a146103fa5780634f64b2be146104235761020b565b806323b872dd116101de57806323b872dd146102e057806324e0febc146102fc5780632b29ba23146103395780633fd2f593146103765761020b565b806301ffc9a71461021057806306fdde031461024d578063081812fc1461027857806318160ddd146102b5575b600080fd5b34801561021c57600080fd5b50610237600480360381019061023291906136e7565b6108bd565b604051610244919061372f565b60405180910390f35b34801561025957600080fd5b50610262610a11565b60405161026f91906137da565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a9190613832565b610a9f565b6040516102ac91906138a0565b60405180910390f35b3480156102c157600080fd5b506102ca610adc565b6040516102d791906138ca565b60405180910390f35b6102fa60048036038101906102f59190613911565b610ae6565b005b34801561030857600080fd5b50610323600480360381019061031e919061399a565b610b51565b60405161033091906139d6565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906139f1565b610b69565b60405161036d919061372f565b60405180910390f35b34801561038257600080fd5b5061039d6004803603810190610398919061399a565b610c15565b6040516103aa9190613a73565b60405180910390f35b3480156103bf57600080fd5b506103c8610f74565b6040516103d59190613a73565b60405180910390f35b6103f860048036038101906103f39190613911565b611002565b005b34801561040657600080fd5b50610421600480360381019061041c9190613bca565b61106d565b005b34801561042f57600080fd5b5061044a60048036038101906104459190613832565b611385565b60405161045791906139d6565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190613c13565b6113a9565b6040516104979493929190613c74565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c291906139f1565b611430565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190613832565b61154f565b6040516104fd91906138a0565b60405180910390f35b34801561051257600080fd5b5061052d6004803603810190610528919061399a565b61158b565b60405161053a91906137da565b60405180910390f35b34801561054f57600080fd5b5061056a600480360381019061056591906139f1565b6117a4565b60405161057791906138ca565b60405180910390f35b34801561058c57600080fd5b506105956117ed565b6040516105a291906138a0565b60405180910390f35b3480156105b757600080fd5b506105c0611811565b6040516105cd91906137da565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613ce5565b61189f565b005b34801561060b57600080fd5b5061062660048036038101906106219190613d25565b611b41565b60405161063391906139d6565b60405180910390f35b34801561064857600080fd5b50610651611db3565b60405161065e91906139d6565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613ce5565b611db9565b60405161069b919061372f565b60405180910390f35b6106be60048036038101906106b99190613e06565b611e9a565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190613eef565b611f75565b005b3480156106f557600080fd5b50610710600480360381019061070b9190613832565b612103565b60405161071d91906137da565b60405180910390f35b34801561073257600080fd5b5061074d6004803603810190610748919061399a565b612175565b60405161075a91906137da565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613f42565b61256f565b60405161079791906139d6565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906139f1565b612814565b005b3480156107d557600080fd5b506107f060048036038101906107eb9190613f95565b6128fc565b6040516107fd919061372f565b60405180910390f35b34801561081257600080fd5b5061082d60048036038101906108289190613fd5565b612994565b60405161083a91906139d6565b60405180910390f35b34801561084f57600080fd5b5061086a60048036038101906108659190614075565b612b23565b604051610877919061372f565b60405180910390f35b34801561088c57600080fd5b506108a760048036038101906108a2919061399a565b612e90565b6040516108b491906139d6565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109115760019050610a0c565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109635760019050610a0c565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109b55760019050610a0c565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a075760019050610a0c565b600090505b919050565b60088054610a1e906140e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4a906140e4565b8015610a975780601f10610a6c57610100808354040283529160200191610a97565b820191906000526020600020905b815481529060010190602001808311610a7a57829003601f168201915b505050505081565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a54905090565b610af1838383612f3c565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610c0e575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b606080600080604067ffffffffffffffff811115610c3657610c35613a9f565b5b6040519080825280601f01601f191660200182016040528015610c685781602001600182028036833780820191505090505b5092506000905060005b6020811015610f6857600460f0878360208110610c9257610c91614115565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015610d6a57603083610d019190614180565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d3657610d35614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610ddc565b605783610d779190614180565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610dac57610dab614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110610df157610df0614115565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015610ec857603083610e539190614180565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610e8391906141b5565b81518110610e9457610e93614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610f46565b605783610ed59190614180565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610f0591906141b5565b81518110610f1657610f15614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282610f5391906141b5565b91508080610f60906141e9565b915050610c72565b50829350505050919050565b600c8054610f81906140e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610fad906140e4565b8015610ffa5780601f10610fcf57610100808354040283529160200191610ffa565b820191906000526020600020905b815481529060010190602001808311610fdd57829003601f168201915b505050505081565b61100d838383612f3c565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110ca57600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836111039190614231565b8151811061111457611113614115565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611194578080611190906141e9565b9150505b8067ffffffffffffffff8111156111ae576111ad613a9f565b5b6040519080825280601f01601f1916602001820160405280156111e05781602001600182028036833780820191505090505b50600c90816111ef9190614417565b5060005b82518110156112e05782818151811061120f5761120e614115565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600c828154611267906140e4565b811061127657611275614115565b5b8154600116156112955790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555080806112d8906141e9565b9150506111f3565b5081518114611380577f2f00000000000000000000000000000000000000000000000000000000000000600c83518154611319906140e4565b811061132857611327614115565b5b8154600116156113475790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b6003818154811061139557600080fd5b906000526020600020016000915090505481565b600460205281600052604060002081815481106113c557600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff169080600001600d9054906101000a900460ff16905084565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114b5575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb90614535565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061159b85610c15565b9150600c80546115aa906140e4565b905090508082516115bb91906141b5565b67ffffffffffffffff8111156115d4576115d3613a9f565b5b6040519080825280601f01601f1916602001820160405280156116065781602001600182028036833780820191505090505b50925060005b818110156116cb57600c818154611622906140e4565b811061163157611630614115565b5b8154600116156116505790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000284828151811061168957611688614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806116c3906141e9565b91505061160c565b5060005b8251811015611798578281815181106116eb576116ea614115565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061174857611747614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611782906141e9565b9250508080611790906141e9565b9150506116cf565b50829350505050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6009805461181e906140e4565b80601f016020809104026020016040519081016040528092919081815260200182805461184a906140e4565b80156118975780601f1061186c57610100808354040283529160200191611897565b820191906000526020600020905b81548152906001019060200180831161187a57829003601f168201915b505050505081565b80156119c057600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193d57600080fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611ad8565b600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a5857600080fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b35919061372f565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611be75750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611bf057600080fd5b6001600460008581526020019081526020016000208054905014611c1357600080fd5b600060046000858152602001908152602001600020600081548110611c3b57611c3a614115565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1614611c6d57600080fd5b6000600102600560008581526020019081526020016000205414611c9057600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260056000858152602001908152602001600020819055506001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d3991906141b5565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560019004604051611da191906138ca565b60405180910390a38291505092915050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e1457600080fd5b600260009054906101000a900460ff1615611e2e57600080fd5b8115611e50576001600260006101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b611ea5848484612f3c565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e84611f5a9061457a565b604051611f6791906139d6565b60405180910390a450505050565b6000600460008581526020019081526020016000208361ffff1681548110611fa057611f9f614115565b5b90600052602060002001905080600001600c9054906101000a900460ff1615611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff59061462d565b60405180910390fd5b80600001600d9054906101000a900460ff1615612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790614699565b60405180910390fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168265ffffffffffff1610156120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090614705565b60405180910390fd5b818160000160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550600181600001600d6101000a81548160ff02191690831515021790555050505050565b60606000826001029050600060046000838152602001908152602001600020805490500361213e5761213481612e90565b9050806001900492505b600060046000838152602001908152602001600020805490501161216157600080fd5b61216d8360010261158b565b915050919050565b6060806060600061218585610c15565b9150604767ffffffffffffffff8111156121a2576121a1613a9f565b5b6040519080825280601f01601f1916602001820160405280156121d45781602001600182028036833780820191505090505b5092507f73000000000000000000000000000000000000000000000000000000000000008360008151811061220c5761220b614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6800000000000000000000000000000000000000000000000000000000000000836001815181106122705761226f614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106122d4576122d3614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f32000000000000000000000000000000000000000000000000000000000000008360038151811061233857612337614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f35000000000000000000000000000000000000000000000000000000000000008360048151811061239c5761239b614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f360000000000000000000000000000000000000000000000000000000000000083600581518110612400576123ff614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a000000000000000000000000000000000000000000000000000000000000008360068151811061246457612463614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b6040811015612563578281815181106124b6576124b5614115565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061251357612512614115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818061254d906141e9565b925050808061255b906141e9565b91505061249a565b50829350505050919050565b600080600460008581526020019081526020016000208361ffff168154811061259b5761259a614115565b5b90600052602060002001905080600001600c9054906101000a900460ff16156125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f09061462d565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061269c5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d290614535565b60405180910390fd5b60008361ffff1614801561270d575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b8015612727575080600001600d9054906101000a900460ff165b156127865760018160000160068282829054906101000a900465ffffffffffff166127529190614725565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555061277e8585611b41565b91505061280d565b80600001600d9054906101000a900460ff16156127e6578060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff16106127e557600080fd5b5b6128098585858460000160069054906101000a900465ffffffffffff1685613253565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289990614535565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008173ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff16815481106129c0576129bf614115565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612a6f5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa590614535565b60405180910390fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612ad957600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610612b0b57600080fd5b612b188686868685613253565b915050949350505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612bc95750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bff90614535565b60405180910390fd5b612c1061363f565b600460008681526020019081526020016000208054905091506000821115612c8d57600060046000878152602001908152602001600020600081548110612c5a57612c59614115565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612c8c57600080fd5b5b60008460050b03612cc85760018160600190151590811515815250506001600a6000828254612cbc91906141b5565b92505081905550612d28565b60008460050b1315612d275783816000019065ffffffffffff16908165ffffffffffff16815250506001816060019015159081151581525050806000015165ffffffffffff16600a6000828254612d1f91906141b5565b925050819055505b5b60046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff021916908315150217905550606082015181600001600d6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505580606001511515816000015165ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f77d96978d8b40ac826d1984d992e71a84672e62d825fda78cd646656481d065b88604051612e7c91906139d6565b60405180910390a460019250505092915050565b60008060056000848152602001908152602001600020549050612eb28161354a565b612ebb57600080fd5b612ec48161357c565b15612ed25782915050612f37565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f9391906138ca565b602060405180830381865afa158015612fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd49190614774565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461300e57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613142573373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061313857503373ffffffffffffffffffffffffffffffffffffffff16600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61314157600080fd5b5b60006006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061319f82846135ae565b6001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131ef9190614231565b925050819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324691906141b5565b9250508190555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff168317925082600102905060006001026005600083815260200190815260200160002054146132e657600080fd5b84600001600c9054906101000a900460ff16613348578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff161461334757600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff166133c99190614725565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555084600001600d9054906101000a900460ff166134645760018560000160008282829054906101000a900465ffffffffffff166134279190614725565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506001600a600082825461345c91906141b5565b925050819055505b8160010260056000838152602001908152602001600020819055506001600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134cf91906141b5565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560405161353391906138ca565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000808360010290506005600082815260200190815260200160002054600190049150600082036135de57600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136c48161368f565b81146136cf57600080fd5b50565b6000813590506136e1816136bb565b92915050565b6000602082840312156136fd576136fc613685565b5b600061370b848285016136d2565b91505092915050565b60008115159050919050565b61372981613714565b82525050565b60006020820190506137446000830184613720565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613784578082015181840152602081019050613769565b60008484015250505050565b6000601f19601f8301169050919050565b60006137ac8261374a565b6137b68185613755565b93506137c6818560208601613766565b6137cf81613790565b840191505092915050565b600060208201905081810360008301526137f481846137a1565b905092915050565b6000819050919050565b61380f816137fc565b811461381a57600080fd5b50565b60008135905061382c81613806565b92915050565b60006020828403121561384857613847613685565b5b60006138568482850161381d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061388a8261385f565b9050919050565b61389a8161387f565b82525050565b60006020820190506138b56000830184613891565b92915050565b6138c4816137fc565b82525050565b60006020820190506138df60008301846138bb565b92915050565b6138ee8161387f565b81146138f957600080fd5b50565b60008135905061390b816138e5565b92915050565b60008060006060848603121561392a57613929613685565b5b6000613938868287016138fc565b9350506020613949868287016138fc565b925050604061395a8682870161381d565b9150509250925092565b6000819050919050565b61397781613964565b811461398257600080fd5b50565b6000813590506139948161396e565b92915050565b6000602082840312156139b0576139af613685565b5b60006139be84828501613985565b91505092915050565b6139d081613964565b82525050565b60006020820190506139eb60008301846139c7565b92915050565b600060208284031215613a0757613a06613685565b5b6000613a15848285016138fc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000613a4582613a1e565b613a4f8185613a29565b9350613a5f818560208601613766565b613a6881613790565b840191505092915050565b60006020820190508181036000830152613a8d8184613a3a565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ad782613790565b810181811067ffffffffffffffff82111715613af657613af5613a9f565b5b80604052505050565b6000613b0961367b565b9050613b158282613ace565b919050565b600067ffffffffffffffff821115613b3557613b34613a9f565b5b613b3e82613790565b9050602081019050919050565b82818337600083830152505050565b6000613b6d613b6884613b1a565b613aff565b905082815260208101848484011115613b8957613b88613a9a565b5b613b94848285613b4b565b509392505050565b600082601f830112613bb157613bb0613a95565b5b8135613bc1848260208601613b5a565b91505092915050565b600060208284031215613be057613bdf613685565b5b600082013567ffffffffffffffff811115613bfe57613bfd61368a565b5b613c0a84828501613b9c565b91505092915050565b60008060408385031215613c2a57613c29613685565b5b6000613c3885828601613985565b9250506020613c498582860161381d565b9150509250929050565b600065ffffffffffff82169050919050565b613c6e81613c53565b82525050565b6000608082019050613c896000830187613c65565b613c966020830186613c65565b613ca36040830185613720565b613cb06060830184613720565b95945050505050565b613cc281613714565b8114613ccd57600080fd5b50565b600081359050613cdf81613cb9565b92915050565b60008060408385031215613cfc57613cfb613685565b5b6000613d0a858286016138fc565b9250506020613d1b85828601613cd0565b9150509250929050565b60008060408385031215613d3c57613d3b613685565b5b6000613d4a858286016138fc565b9250506020613d5b85828601613985565b9150509250929050565b600067ffffffffffffffff821115613d8057613d7f613a9f565b5b613d8982613790565b9050602081019050919050565b6000613da9613da484613d65565b613aff565b905082815260208101848484011115613dc557613dc4613a9a565b5b613dd0848285613b4b565b509392505050565b600082601f830112613ded57613dec613a95565b5b8135613dfd848260208601613d96565b91505092915050565b60008060008060808587031215613e2057613e1f613685565b5b6000613e2e878288016138fc565b9450506020613e3f878288016138fc565b9350506040613e508782880161381d565b925050606085013567ffffffffffffffff811115613e7157613e7061368a565b5b613e7d87828801613dd8565b91505092959194509250565b600061ffff82169050919050565b613ea081613e89565b8114613eab57600080fd5b50565b600081359050613ebd81613e97565b92915050565b613ecc81613c53565b8114613ed757600080fd5b50565b600081359050613ee981613ec3565b92915050565b600080600060608486031215613f0857613f07613685565b5b6000613f1686828701613985565b9350506020613f2786828701613eae565b9250506040613f3886828701613eda565b9150509250925092565b600080600060608486031215613f5b57613f5a613685565b5b6000613f69868287016138fc565b9350506020613f7a86828701613985565b9250506040613f8b86828701613eae565b9150509250925092565b60008060408385031215613fac57613fab613685565b5b6000613fba858286016138fc565b9250506020613fcb858286016138fc565b9150509250929050565b60008060008060808587031215613fef57613fee613685565b5b6000613ffd878288016138fc565b945050602061400e87828801613985565b935050604061401f87828801613eae565b925050606061403087828801613eda565b91505092959194509250565b60008160050b9050919050565b6140528161403c565b811461405d57600080fd5b50565b60008135905061406f81614049565b92915050565b6000806040838503121561408c5761408b613685565b5b600061409a85828601613985565b92505060206140ab85828601614060565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140fc57607f821691505b60208210810361410f5761410e6140b5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061418b82614144565b915061419683614144565b9250828201905060ff8111156141af576141ae614151565b5b92915050565b60006141c0826137fc565b91506141cb836137fc565b92508282019050808211156141e3576141e2614151565b5b92915050565b60006141f4826137fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361422657614225614151565b5b600182019050919050565b600061423c826137fc565b9150614247836137fc565b925082820390508181111561425f5761425e614151565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026142ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261428a565b6142d4868361428a565b95508019841693508086168417925050509392505050565b6000819050919050565b600061431161430c614307846137fc565b6142ec565b6137fc565b9050919050565b6000819050919050565b61432b836142f6565b61433f61433782614318565b84845461429a565b825550505050565b600090565b614354614347565b61435f818484614322565b505050565b5b818110156143835761437860008261434c565b600181019050614365565b5050565b601f8211156143c85761439981614265565b6143a28461427a565b810160208510156143b1578190505b6143c56143bd8561427a565b830182614364565b50505b505050565b60008160020a8304905092915050565b60006143ee600019846008026143cd565b1980831691505092915050565b600061440783836143dd565b9150826002028217905092915050565b61442082613a1e565b67ffffffffffffffff81111561443957614438613a9f565b5b61444382546140e4565b61444e828285614387565b600060209050601f831160018114614481576000841561446f578287015190505b61447985826143fb565b8655506144e1565b601f19841661448f86614265565b60005b828110156144b757848901518255600182019150602085019450602081019050614492565b868310156144d457848901516144d0601f8916826143dd565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b600061451f600a83613755565b915061452a826144e9565b602082019050919050565b6000602082019050818103600083015261454e81614512565b9050919050565b6000819050602082019050919050565b60006145718251613964565b80915050919050565b600061458582613a1e565b8261458f84614555565b905061459a81614565565b925060208210156145da576145d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080261428a565b831692505b5050919050565b7f4552525f53504152534500000000000000000000000000000000000000000000600082015250565b6000614617600a83613755565b9150614622826145e1565b602082019050919050565b600060208201905081810360008301526146468161460a565b9050919050565b7f4552525f43415050454400000000000000000000000000000000000000000000600082015250565b6000614683600a83613755565b915061468e8261464d565b602082019050919050565b600060208201905081810360008301526146b281614676565b9050919050565b7f4552525f4341505f4c4f57000000000000000000000000000000000000000000600082015250565b60006146ef600b83613755565b91506146fa826146b9565b602082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b600061473082613c53565b915061473b83613c53565b9250828201905065ffffffffffff81111561475957614758614151565b5b92915050565b60008151905061476e816138e5565b92915050565b60006020828403121561478a57614789613685565b5b60006147988482850161475f565b9150509291505056fea26469706673582212209832c65cee22fc017db822d90ff9954969b15c3a4cea7123bdd545203784fe5564736f6c63430008120033 -\ No newline at end of file +60806040523480156200001157600080fd5b5060405162004e7738038062004e77833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b8190555082600890816200008f919062000564565b508160099081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b61481c806200065b6000396000f3fe60806040526004361061020b576000357c01000000000000000000000000000000000000000000000000000000009004806370a082311161012a578063c6eba7c4116100bd578063da2824a81161008c578063da2824a8146107a0578063e985e9c5146107c9578063f117e17314610806578063f70a3de814610843578063f9613ab2146108805761020b565b8063c6eba7c4146106c0578063c87b56dd146106e9578063c9796c3914610726578063d824ee4f146107635761020b565b8063adf288df116100f9578063adf288df146105ff578063b1a6afd31461063c578063b242e53414610667578063b88d4fde146106a45761020b565b806370a08231146105435780638da5cb5b1461058057806395d89b41146105ab578063a22cb465146105d65761020b565b806340c84b0e116101a2578063559f5dc911610171578063559f5dc9146104605780635ae06f7e146104a05780636352211e146104c957806369e85c71146105065761020b565b806340c84b0e146103b357806342842e0e146103de57806349f2553a146103fa5780634f64b2be146104235761020b565b806323b872dd116101de57806323b872dd146102e057806324e0febc146102fc5780632b29ba23146103395780633fd2f593146103765761020b565b806301ffc9a71461021057806306fdde031461024d578063081812fc1461027857806318160ddd146102b5575b600080fd5b34801561021c57600080fd5b506102376004803603810190610232919061372c565b6108bd565b6040516102449190613774565b60405180910390f35b34801561025957600080fd5b50610262610a11565b60405161026f919061381f565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a9190613877565b610a9f565b6040516102ac91906138e5565b60405180910390f35b3480156102c157600080fd5b506102ca610adc565b6040516102d7919061390f565b60405180910390f35b6102fa60048036038101906102f59190613956565b610ae6565b005b34801561030857600080fd5b50610323600480360381019061031e91906139df565b610b51565b6040516103309190613a1b565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613a36565b610b69565b60405161036d9190613774565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906139df565b610c15565b6040516103aa9190613ab8565b60405180910390f35b3480156103bf57600080fd5b506103c8610f74565b6040516103d59190613ab8565b60405180910390f35b6103f860048036038101906103f39190613956565b611002565b005b34801561040657600080fd5b50610421600480360381019061041c9190613c0f565b61106d565b005b34801561042f57600080fd5b5061044a60048036038101906104459190613877565b611385565b6040516104579190613a1b565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190613c58565b6113a9565b6040516104979493929190613cb9565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190613a36565b611430565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190613877565b61154f565b6040516104fd91906138e5565b60405180910390f35b34801561051257600080fd5b5061052d600480360381019061052891906139df565b61158b565b60405161053a919061381f565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190613a36565b6117a4565b604051610577919061390f565b60405180910390f35b34801561058c57600080fd5b506105956117ed565b6040516105a291906138e5565b60405180910390f35b3480156105b757600080fd5b506105c0611811565b6040516105cd919061381f565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613d2a565b61189f565b005b34801561060b57600080fd5b5061062660048036038101906106219190613d6a565b611b41565b6040516106339190613a1b565b60405180910390f35b34801561064857600080fd5b50610651611db3565b60405161065e9190613a1b565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613d2a565b611db9565b60405161069b9190613774565b60405180910390f35b6106be60048036038101906106b99190613e4b565b611e9a565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190613f34565b611f75565b005b3480156106f557600080fd5b50610710600480360381019061070b9190613877565b61212d565b60405161071d919061381f565b60405180910390f35b34801561073257600080fd5b5061074d600480360381019061074891906139df565b61219f565b60405161075a919061381f565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613f87565b612599565b6040516107979190613a1b565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190613a36565b61283e565b005b3480156107d557600080fd5b506107f060048036038101906107eb9190613fda565b612926565b6040516107fd9190613774565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061401a565b6129be565b60405161083a9190613a1b565b60405180910390f35b34801561084f57600080fd5b5061086a600480360381019061086591906140ba565b612b68565b6040516108779190613774565b60405180910390f35b34801561088c57600080fd5b506108a760048036038101906108a291906139df565b612ed5565b6040516108b49190613a1b565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109115760019050610a0c565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109635760019050610a0c565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109b55760019050610a0c565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a075760019050610a0c565b600090505b919050565b60088054610a1e90614129565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4a90614129565b8015610a975780601f10610a6c57610100808354040283529160200191610a97565b820191906000526020600020905b815481529060010190602001808311610a7a57829003601f168201915b505050505081565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a54905090565b610af1838383612f81565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610c0e575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b606080600080604067ffffffffffffffff811115610c3657610c35613ae4565b5b6040519080825280601f01601f191660200182016040528015610c685781602001600182028036833780820191505090505b5092506000905060005b6020811015610f6857600460f0878360208110610c9257610c9161415a565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015610d6a57603083610d0191906141c5565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610d3657610d3561415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610ddc565b605783610d7791906141c5565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610dac57610dab61415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110610df157610df061415a565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015610ec857603083610e5391906141c5565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610e8391906141fa565b81518110610e9457610e9361415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610f46565b605783610ed591906141c5565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610f0591906141fa565b81518110610f1657610f1561415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282610f5391906141fa565b91508080610f609061422e565b915050610c72565b50829350505050919050565b600c8054610f8190614129565b80601f0160208091040260200160405190810160405280929190818152602001828054610fad90614129565b8015610ffa5780601f10610fcf57610100808354040283529160200191610ffa565b820191906000526020600020905b815481529060010190602001808311610fdd57829003601f168201915b505050505081565b61100d838383612f81565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110ca57600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836111039190614276565b815181106111145761111361415a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146111945780806111909061422e565b9150505b8067ffffffffffffffff8111156111ae576111ad613ae4565b5b6040519080825280601f01601f1916602001820160405280156111e05781602001600182028036833780820191505090505b50600c90816111ef919061445c565b5060005b82518110156112e05782818151811061120f5761120e61415a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600c82815461126790614129565b81106112765761127561415a565b5b8154600116156112955790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555080806112d89061422e565b9150506111f3565b5081518114611380577f2f00000000000000000000000000000000000000000000000000000000000000600c8351815461131990614129565b81106113285761132761415a565b5b8154600116156113475790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b6003818154811061139557600080fd5b906000526020600020016000915090505481565b600460205281600052604060002081815481106113c557600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff169080600001600d9054906101000a900460ff16905084565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114b5575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb9061457a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061159b85610c15565b9150600c80546115aa90614129565b905090508082516115bb91906141fa565b67ffffffffffffffff8111156115d4576115d3613ae4565b5b6040519080825280601f01601f1916602001820160405280156116065781602001600182028036833780820191505090505b50925060005b818110156116cb57600c81815461162290614129565b81106116315761163061415a565b5b8154600116156116505790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000028482815181106116895761168861415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806116c39061422e565b91505061160c565b5060005b8251811015611798578281815181106116eb576116ea61415a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106117485761174761415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806117829061422e565b92505080806117909061422e565b9150506116cf565b50829350505050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6009805461181e90614129565b80601f016020809104026020016040519081016040528092919081815260200182805461184a90614129565b80156118975780601f1061186c57610100808354040283529160200191611897565b820191906000526020600020905b81548152906001019060200180831161187a57829003601f168201915b505050505081565b80156119c057600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193d57600080fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611ad8565b600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a5857600080fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b359190613774565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611be75750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611bf057600080fd5b6001600460008581526020019081526020016000208054905014611c1357600080fd5b600060046000858152602001908152602001600020600081548110611c3b57611c3a61415a565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1614611c6d57600080fd5b6000600102600560008581526020019081526020016000205414611c9057600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260056000858152602001908152602001600020819055506001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d3991906141fa565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560019004604051611da1919061390f565b60405180910390a38291505092915050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e1457600080fd5b600260009054906101000a900460ff1615611e2e57600080fd5b8115611e50576001600260006101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b611ea5848484612f81565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e84611f5a906145bf565b604051611f679190613a1b565b60405180910390a450505050565b6000600460008581526020019081526020016000208361ffff1681548110611fa057611f9f61415a565b5b90600052602060002001905080600001600c9054906101000a900460ff1615611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614672565b60405180910390fd5b80600001600d9054906101000a900460ff1615612050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612047906146de565b60405180910390fd5b60008265ffffffffffff160361207a578060000160069054906101000a900465ffffffffffff1691505b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168265ffffffffffff1610156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da9061474a565b60405180910390fd5b818160000160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550600181600001600d6101000a81548160ff02191690831515021790555050505050565b6060600082600102905060006004600083815260200190815260200160002080549050036121685761215e81612ed5565b9050806001900492505b600060046000838152602001908152602001600020805490501161218b57600080fd5b6121978360010261158b565b915050919050565b606080606060006121af85610c15565b9150604767ffffffffffffffff8111156121cc576121cb613ae4565b5b6040519080825280601f01601f1916602001820160405280156121fe5781602001600182028036833780820191505090505b5092507f7300000000000000000000000000000000000000000000000000000000000000836000815181106122365761223561415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f68000000000000000000000000000000000000000000000000000000000000008360018151811061229a5761229961415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106122fe576122fd61415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3200000000000000000000000000000000000000000000000000000000000000836003815181106123625761236161415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3500000000000000000000000000000000000000000000000000000000000000836004815181106123c6576123c561415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f36000000000000000000000000000000000000000000000000000000000000008360058151811061242a5761242961415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a000000000000000000000000000000000000000000000000000000000000008360068151811061248e5761248d61415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b604081101561258d578281815181106124e0576124df61415a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061253d5761253c61415a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806125779061422e565b92505080806125859061422e565b9150506124c4565b50829350505050919050565b600080600460008581526020019081526020016000208361ffff16815481106125c5576125c461415a565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614672565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806126c65750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc9061457a565b60405180910390fd5b60008361ffff16148015612737575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b8015612751575080600001600d9054906101000a900460ff165b156127b05760018160000160068282829054906101000a900465ffffffffffff1661277c919061476a565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506127a88585611b41565b915050612837565b80600001600d9054906101000a900460ff1615612810578060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff161061280f57600080fd5b5b6128338585858460000160069054906101000a900465ffffffffffff1685613298565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c39061457a565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008173ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff16815481106129ea576129e961415a565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612a995750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf9061457a565b60405180910390fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612b0357600080fd5b80600001600d9054906101000a900460ff16612b1e57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610612b5057600080fd5b612b5d8686868685613298565b915050949350505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612c0e5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c449061457a565b60405180910390fd5b612c55613684565b600460008681526020019081526020016000208054905091506000821115612cd257600060046000878152602001908152602001600020600081548110612c9f57612c9e61415a565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1611612cd157600080fd5b5b60008460050b03612d0d5760018160600190151590811515815250506001600a6000828254612d0191906141fa565b92505081905550612d6d565b60008460050b1315612d6c5783816000019065ffffffffffff16908165ffffffffffff16815250506001816060019015159081151581525050806000015165ffffffffffff16600a6000828254612d6491906141fa565b925050819055505b5b60046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff021916908315150217905550606082015181600001600d6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505580606001511515816000015165ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f77d96978d8b40ac826d1984d992e71a84672e62d825fda78cd646656481d065b88604051612ec19190613a1b565b60405180910390a460019250505092915050565b60008060056000848152602001908152602001600020549050612ef78161358f565b612f0057600080fd5b612f09816135c1565b15612f175782915050612f7c565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612fd8919061390f565b602060405180830381865afa158015612ff5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301991906147b9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461305357600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613187573373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061317d57503373ffffffffffffffffffffffffffffffffffffffff16600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61318657600080fd5b5b60006006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506131e482846135f3565b6001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132349190614276565b925050819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461328b91906141fa565b9250508190555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff1683179250826001029050600060010260056000838152602001908152602001600020541461332b57600080fd5b84600001600c9054906101000a900460ff1661338d578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff161461338c57600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff1661340e919061476a565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555084600001600d9054906101000a900460ff166134a95760018560000160008282829054906101000a900465ffffffffffff1661346c919061476a565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506001600a60008282546134a191906141fa565b925050819055505b8160010260056000838152602001908152602001600020819055506001600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461351491906141fa565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051613578919061390f565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b60008083600102905060056000828152602001908152602001600020546001900491506000820361362357600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613709816136d4565b811461371457600080fd5b50565b60008135905061372681613700565b92915050565b600060208284031215613742576137416136ca565b5b600061375084828501613717565b91505092915050565b60008115159050919050565b61376e81613759565b82525050565b60006020820190506137896000830184613765565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137c95780820151818401526020810190506137ae565b60008484015250505050565b6000601f19601f8301169050919050565b60006137f18261378f565b6137fb818561379a565b935061380b8185602086016137ab565b613814816137d5565b840191505092915050565b6000602082019050818103600083015261383981846137e6565b905092915050565b6000819050919050565b61385481613841565b811461385f57600080fd5b50565b6000813590506138718161384b565b92915050565b60006020828403121561388d5761388c6136ca565b5b600061389b84828501613862565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138cf826138a4565b9050919050565b6138df816138c4565b82525050565b60006020820190506138fa60008301846138d6565b92915050565b61390981613841565b82525050565b60006020820190506139246000830184613900565b92915050565b613933816138c4565b811461393e57600080fd5b50565b6000813590506139508161392a565b92915050565b60008060006060848603121561396f5761396e6136ca565b5b600061397d86828701613941565b935050602061398e86828701613941565b925050604061399f86828701613862565b9150509250925092565b6000819050919050565b6139bc816139a9565b81146139c757600080fd5b50565b6000813590506139d9816139b3565b92915050565b6000602082840312156139f5576139f46136ca565b5b6000613a03848285016139ca565b91505092915050565b613a15816139a9565b82525050565b6000602082019050613a306000830184613a0c565b92915050565b600060208284031215613a4c57613a4b6136ca565b5b6000613a5a84828501613941565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000613a8a82613a63565b613a948185613a6e565b9350613aa48185602086016137ab565b613aad816137d5565b840191505092915050565b60006020820190508181036000830152613ad28184613a7f565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b1c826137d5565b810181811067ffffffffffffffff82111715613b3b57613b3a613ae4565b5b80604052505050565b6000613b4e6136c0565b9050613b5a8282613b13565b919050565b600067ffffffffffffffff821115613b7a57613b79613ae4565b5b613b83826137d5565b9050602081019050919050565b82818337600083830152505050565b6000613bb2613bad84613b5f565b613b44565b905082815260208101848484011115613bce57613bcd613adf565b5b613bd9848285613b90565b509392505050565b600082601f830112613bf657613bf5613ada565b5b8135613c06848260208601613b9f565b91505092915050565b600060208284031215613c2557613c246136ca565b5b600082013567ffffffffffffffff811115613c4357613c426136cf565b5b613c4f84828501613be1565b91505092915050565b60008060408385031215613c6f57613c6e6136ca565b5b6000613c7d858286016139ca565b9250506020613c8e85828601613862565b9150509250929050565b600065ffffffffffff82169050919050565b613cb381613c98565b82525050565b6000608082019050613cce6000830187613caa565b613cdb6020830186613caa565b613ce86040830185613765565b613cf56060830184613765565b95945050505050565b613d0781613759565b8114613d1257600080fd5b50565b600081359050613d2481613cfe565b92915050565b60008060408385031215613d4157613d406136ca565b5b6000613d4f85828601613941565b9250506020613d6085828601613d15565b9150509250929050565b60008060408385031215613d8157613d806136ca565b5b6000613d8f85828601613941565b9250506020613da0858286016139ca565b9150509250929050565b600067ffffffffffffffff821115613dc557613dc4613ae4565b5b613dce826137d5565b9050602081019050919050565b6000613dee613de984613daa565b613b44565b905082815260208101848484011115613e0a57613e09613adf565b5b613e15848285613b90565b509392505050565b600082601f830112613e3257613e31613ada565b5b8135613e42848260208601613ddb565b91505092915050565b60008060008060808587031215613e6557613e646136ca565b5b6000613e7387828801613941565b9450506020613e8487828801613941565b9350506040613e9587828801613862565b925050606085013567ffffffffffffffff811115613eb657613eb56136cf565b5b613ec287828801613e1d565b91505092959194509250565b600061ffff82169050919050565b613ee581613ece565b8114613ef057600080fd5b50565b600081359050613f0281613edc565b92915050565b613f1181613c98565b8114613f1c57600080fd5b50565b600081359050613f2e81613f08565b92915050565b600080600060608486031215613f4d57613f4c6136ca565b5b6000613f5b868287016139ca565b9350506020613f6c86828701613ef3565b9250506040613f7d86828701613f1f565b9150509250925092565b600080600060608486031215613fa057613f9f6136ca565b5b6000613fae86828701613941565b9350506020613fbf868287016139ca565b9250506040613fd086828701613ef3565b9150509250925092565b60008060408385031215613ff157613ff06136ca565b5b6000613fff85828601613941565b925050602061401085828601613941565b9150509250929050565b60008060008060808587031215614034576140336136ca565b5b600061404287828801613941565b9450506020614053878288016139ca565b935050604061406487828801613ef3565b925050606061407587828801613f1f565b91505092959194509250565b60008160050b9050919050565b61409781614081565b81146140a257600080fd5b50565b6000813590506140b48161408e565b92915050565b600080604083850312156140d1576140d06136ca565b5b60006140df858286016139ca565b92505060206140f0858286016140a5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061414157607f821691505b602082108103614154576141536140fa565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141d082614189565b91506141db83614189565b9250828201905060ff8111156141f4576141f3614196565b5b92915050565b600061420582613841565b915061421083613841565b925082820190508082111561422857614227614196565b5b92915050565b600061423982613841565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361426b5761426a614196565b5b600182019050919050565b600061428182613841565b915061428c83613841565b92508282039050818111156142a4576142a3614196565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b60006008830261430f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826142cf565b61431986836142cf565b95508019841693508086168417925050509392505050565b6000819050919050565b600061435661435161434c84613841565b614331565b613841565b9050919050565b6000819050919050565b6143708361433b565b61438461437c8261435d565b8484546142df565b825550505050565b600090565b61439961438c565b6143a4818484614367565b505050565b5b818110156143c8576143bd600082614391565b6001810190506143aa565b5050565b601f82111561440d576143de816142aa565b6143e7846142bf565b810160208510156143f6578190505b61440a614402856142bf565b8301826143a9565b50505b505050565b60008160020a8304905092915050565b600061443360001984600802614412565b1980831691505092915050565b600061444c8383614422565b9150826002028217905092915050565b61446582613a63565b67ffffffffffffffff81111561447e5761447d613ae4565b5b6144888254614129565b6144938282856143cc565b600060209050601f8311600181146144c657600084156144b4578287015190505b6144be8582614440565b865550614526565b601f1984166144d4866142aa565b60005b828110156144fc578489015182556001820191506020850194506020810190506144d7565b868310156145195784890151614515601f891682614422565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000614564600a8361379a565b915061456f8261452e565b602082019050919050565b6000602082019050818103600083015261459381614557565b9050919050565b6000819050602082019050919050565b60006145b682516139a9565b80915050919050565b60006145ca82613a63565b826145d48461459a565b90506145df816145aa565b9250602082101561461f5761461a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026142cf565b831692505b5050919050565b7f4552525f53504152534500000000000000000000000000000000000000000000600082015250565b600061465c600a8361379a565b915061466782614626565b602082019050919050565b6000602082019050818103600083015261468b8161464f565b9050919050565b7f4552525f43415050454400000000000000000000000000000000000000000000600082015250565b60006146c8600a8361379a565b91506146d382614692565b602082019050919050565b600060208201905081810360008301526146f7816146bb565b9050919050565b7f4552525f4341505f4c4f57000000000000000000000000000000000000000000600082015250565b6000614734600b8361379a565b915061473f826146fe565b602082019050919050565b6000602082019050818103600083015261476381614727565b9050919050565b600061477582613c98565b915061478083613c98565b9250828201905065ffffffffffff81111561479e5761479d614196565b5b92915050565b6000815190506147b38161392a565b92915050565b6000602082840312156147cf576147ce6136ca565b5b60006147dd848285016147a4565b9150509291505056fea26469706673582212204402a606b62788763a57212bfd4522efc1020546fedc4efc69b6b1112a3c7b7c64736f6c63430008120033 +\ No newline at end of file diff --git a/python/tests/test_basic.py b/python/tests/test_basic.py @@ -575,5 +575,35 @@ class Test(EthTesterCase): self.assertEqual(r['status'], 0) + def test_mint_cap_immediate(self): + nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) + c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) + + (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=-1) + self.rpc.do(o) + o = receipt(tx_hash_hex) + r = self.conn.do(o) + self.assertEqual(r['status'], 1) + + for i in range(3): + (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1+i], hash_of_foo, 0) + self.rpc.do(o) + o = receipt(tx_hash_hex) + r = self.conn.do(o) + self.assertEqual(r['status'], 1) + + (tx_hash_hex, o) = c.set_cap(self.address, self.accounts[0], hash_of_foo, 0, 0) + self.rpc.do(o) + o = receipt(tx_hash_hex) + r = self.conn.do(o) + self.assertEqual(r['status'], 1) + + (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[2], hash_of_foo, 0) + self.rpc.do(o) + o = receipt(tx_hash_hex) + r = self.conn.do(o) + self.assertEqual(r['status'], 0) + + if __name__ == '__main__': unittest.main() diff --git a/solidity/CraftNFT.sol b/solidity/CraftNFT.sol @@ -143,6 +143,7 @@ contract CraftNFT { // Allocate tokens for minting. // if count is set to 0, only a single unique token can be minted. + // if count is set a negative number, the token will be unbounded (may be capped later with setCap). function allocate(bytes32 content, int48 count) public returns (bool) { uint256 l; require(msg.sender == owner || writer[msg.sender], 'ERR_ACCESS'); @@ -215,12 +216,17 @@ contract CraftNFT { mintedToken[_k] = bytes32(_data); } + // Apply cap on unbounded token + // if cap value is set to 0, cap will be set on the current count. function setCap(bytes32 _content, uint16 _batch, uint48 _cap) public { tokenSpec storage spec; spec = token[_content][uint256(_batch)]; require(!spec.sparse, 'ERR_SPARSE'); require(!spec.capped, 'ERR_CAPPED'); + if (_cap == 0) { + _cap = spec.cursor; + } require(_cap >= spec.count, 'ERR_CAP_LOW'); spec.count = _cap; spec.capped = true; @@ -255,13 +261,14 @@ contract CraftNFT { // If the index is not the next sequential index in the batch, the token will be marked as sparse. // Sparse tokens cannot thereafter be minted using mintFromBatchTo // The method will fail if the token at the specified index has already been minted, or if the index is out of bounds of the batch. - // This method cannot be used to mint a unique token. + // This method cannot be used to mint a unique token or an unbounded token. function mintExactFromBatchTo(address _recipient, bytes32 _content, uint16 _batch, uint48 _index) public returns (bytes32) { tokenSpec storage spec; spec = token[_content][_batch]; require(msg.sender == owner || writer[msg.sender], 'ERR_ACCESS'); require(spec.count > 0); + require(spec.capped); require(_index < spec.count); return mintBatchCore(_recipient, _content, _batch, _index, spec); }