Profiling results ----------------- Total cpu time observed: 149940ms (out of 152684ms) Number of samples taken: 405 (once every 370ms) (Hiding functions with self<1.0% and local<2.0%: 2 of 106 hidden) ============================================================================== Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ============================================================================== run [8] 50.0% [1] 149940(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [3] 50.0% loop [13] 46.6% run-improve39 [4] 2.3% eval-errors [38] 0.7% oracle-error [5] 0.3% get-final-combination [6] 0.1% ------------------------------------------------------------------------------ loop [81] 100.0% [2] 296(0.2%) 0(0.0%) expand-id-application-form17 (unknown source) syntax-e/no-taint [7] 100.0% ------------------------------------------------------------------------------ ??? [1] 100.0% [3] 149940(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [8] 100.0% ------------------------------------------------------------------------------ ??? [1] 100.0% [4] 6806(4.5%) 0(0.0%) run-improve39 ...ie/develop/src/mainloop.rkt:287:0 setup-prog!32 [9] 67.4% for-loop [10] 32.6% ------------------------------------------------------------------------------ ??? [1] 100.0% [5] 918(0.6%) 0(0.0%) oracle-error ...erbie/develop/src/points.rkt:227:0 for-loop [11] 100.0% ------------------------------------------------------------------------------ ??? [1] 100.0% [6] 298(0.2%) 0(0.0%) get-final-combination ...op/src/mainloop.rkt:310:0 argmins [12] 100.0% ------------------------------------------------------------------------------ expand-id-application-form17 [2] 100.0% [7] 296(0.2%) 0(0.0%) syntax-e/no-taint (unknown source) loop [81] 100.0% ------------------------------------------------------------------------------ profile-thunk16 [3] 100.0% [8] 149940(100.0%) 0(0.0%) run ...racket/share/pkgs/profile-lib/main.rkt:39:2 ??? [1] 100.0% ------------------------------------------------------------------------------ run-improve39 [4] 100.0% [9] 4590(3.1%) 0(0.0%) setup-prog!32 ...bie/develop/src/mainloop.rkt:63:0 loop [13] 100.0% ------------------------------------------------------------------------------ run-improve39 [4] 100.0% [10] 2216(1.5%) 0(0.0%) for-loop ...herbie/develop/src/mainloop.rkt:304:10 run-iter! [14] 100.0% ------------------------------------------------------------------------------ oracle-error [5] 100.0% [11] 918(0.6%) 0(0.0%) for-loop ...es/herbie/develop/src/points.rkt:228:2 loop [29] 100.0% ------------------------------------------------------------------------------ get-final-combination [6] 100.0% [12] 298(0.2%) 0(0.0%) argmins ...ies/herbie/develop/src/common.rkt:143:0 ??? [15] 100.0% ------------------------------------------------------------------------------ setup-prog!32 [9] 3.2% ??? [1] 96.8% [13] 144274(96.2%) 0(0.0%) loop ...htlies/herbie/develop/src/points.rkt:167:2 loop [23] 53.2% loop [16] 31.4% make-exacts* [24] 11.7% make-exacts [17] 2.3% for-loop [18] 1.3% ------------------------------------------------------------------------------ for-loop [10] 100.0% [14] 2216(1.5%) 0(0.0%) run-iter! ...herbie/develop/src/mainloop.rkt:268:0 localize-error [19] 45.7% finalize-iter! [20] 26.8% gen-rewrites! [21] 13.8% simplify! [22] 13.7% ------------------------------------------------------------------------------ argmins [12] 100.0% [15] 298(0.2%) 0(0.0%) ??? ...lies/herbie/develop/src/mainloop.rkt:111:19 eval-errors [38] 100.0% ------------------------------------------------------------------------------ loop [13] 100.0% [16] 45374(30.3%) 0(0.0%) loop ...htlies/herbie/develop/src/points.rkt:125:2 loop [23] 69.7% make-exacts* [24] 29.6% eval-prog [39] 0.7% ------------------------------------------------------------------------------ loop [13] 100.0% [17] 3266(2.2%) 0(0.0%) make-exacts ...herbie/develop/src/points.rkt:123:0 make-exacts* [24] 70.7% loop [23] 29.3% ------------------------------------------------------------------------------ loop [13] 100.0% [18] 1920(1.3%) 344(0.2%) for-loop ...s/herbie/develop/src/points.rkt:182:19 for-loop [25] 82.1% ------------------------------------------------------------------------------ run-iter! [14] 100.0% [19] 1012(0.7%) 0(0.0%) localize-error ...velop/src/core/localize.rkt:51:0 hash-ref! [52] 100.0% ------------------------------------------------------------------------------ run-iter! [14] 100.0% [20] 594(0.4%) 0(0.0%) finalize-iter! ...e/develop/src/mainloop.rkt:222:0 ??? [26] 100.0% ------------------------------------------------------------------------------ run-iter! [14] 100.0% [21] 306(0.2%) 0(0.0%) gen-rewrites! ...ie/develop/src/mainloop.rkt:165:0 for-loop [27] 100.0% ------------------------------------------------------------------------------ run-iter! [14] 100.0% [22] 304(0.2%) 0(0.0%) simplify! ...herbie/develop/src/mainloop.rkt:182:0 for-loop [28] 100.0% ------------------------------------------------------------------------------ make-exacts [17] 0.9% loop [16] 28.9% loop [13] 70.2% [23] 109382(73.0%) 308(0.2%) loop ...htlies/herbie/develop/src/points.rkt:108:4 loop [29] 99.1% ??? [44] 0.6% ------------------------------------------------------------------------------ make-exacts [17] 7.1% loop [16] 41.1% loop [13] 51.8% [24] 32660(21.8%) 0(0.0%) make-exacts* ...erbie/develop/src/points.rkt:105:0 loop [29] 93.8% eval-prog [39] 6.2% ------------------------------------------------------------------------------ for-loop [18] 100.0% [25] 1576(1.1%) 300(0.2%) for-loop ...es/herbie/develop/src/points.rkt:159:4 ??? [51] 81.0% ------------------------------------------------------------------------------ finalize-iter! [20] 100.0% [26] 594(0.4%) 0(0.0%) ??? ...contract/private/arrow-val-first.rkt:388:18 for-loop [30] 100.0% ------------------------------------------------------------------------------ gen-rewrites! [21] 100.0% [27] 306(0.2%) 0(0.0%) for-loop ...herbie/develop/src/mainloop.rkt:170:11 ??? [31] 100.0% ------------------------------------------------------------------------------ simplify! [22] 100.0% [28] 304(0.2%) 0(0.0%) for-loop .../herbie/develop/src/mainloop.rkt:186:6 for-loop [32] 100.0% ------------------------------------------------------------------------------ map [45] 0.0% parse-loop14 [58] 0.3% make-exacts* [24] 0.6% for-loop [11] 0.6% ??? [60] 0.6% loop [23] 1.9% loop [29] 95.9% [29] 141866(94.6%) 0(0.0%) loop ...cket/collects/racket/private/map.rkt:40:19 loop [29] 95.9% ??? [44] 3.1% hash-ref! [52] 1.0% ??? [55] 0.0% ??? [51] 0.0% ------------------------------------------------------------------------------ ??? [26] 100.0% [30] 594(0.4%) 0(0.0%) for-loop ...ie/develop/src/core/alt-table.rkt:51:2 atab-add-altn [33] 100.0% ------------------------------------------------------------------------------ for-loop [27] 100.0% [31] 306(0.2%) 0(0.0%) ??? ...ies/herbie/develop/src/alternative.rkt:54:0 rewriter [34] 100.0% ------------------------------------------------------------------------------ for-loop [28] 100.0% [32] 304(0.2%) 0(0.0%) for-loop .../herbie/develop/src/mainloop.rkt:210:8 ??? [51] 100.0% ------------------------------------------------------------------------------ for-loop [30] 100.0% [33] 594(0.4%) 0(0.0%) atab-add-altn ...elop/src/core/alt-table.rkt:210:0 best-and-tied-at-points [36] 50.2% override-at-pnts [37] 49.8% ------------------------------------------------------------------------------ ??? [31] 100.0% [34] 306(0.2%) 0(0.0%) rewriter ...bie/develop/src/core/matcher.rkt:131:2 for-loop [35] 100.0% ------------------------------------------------------------------------------ rewriter [34] 100.0% [35] 306(0.2%) 0(0.0%) for-loop ...ie/develop/src/core/matcher.rkt:134:10 type-of [40] 100.0% ------------------------------------------------------------------------------ atab-add-altn [33] 100.0% [36] 298(0.2%) 0(0.0%) best-and-tied-at-points ...ore/alt-table.rkt:122:0 eval-errors [38] 100.0% ------------------------------------------------------------------------------ atab-add-altn [33] 100.0% [37] 296(0.2%) 0(0.0%) override-at-pnts ...p/src/core/alt-table.rkt:145:0 eval-prog [39] 100.0% ------------------------------------------------------------------------------ best-and-tied-at-points [36] 10.5% ??? [15] 10.5% ??? [1] 78.9% [38] 2830(1.9%) 0(0.0%) eval-errors ...herbie/develop/src/points.rkt:208:0 for-loop [41] 100.0% ------------------------------------------------------------------------------ override-at-pnts [37] 11.3% loop [16] 11.9% make-exacts* [24] 76.9% [39] 2630(1.8%) 0(0.0%) eval-prog ...herbie/develop/src/programs.rkt:109:0 f206 [42] 40.9% hash-ref! [52] 35.1% loop [81] 12.8% temp68_2 [43] 11.3% ------------------------------------------------------------------------------ for-loop [35] 100.0% [40] 306(0.2%) 0(0.0%) type-of .../herbie/develop/src/type-check.rkt:34:0 table-ref [46] 100.0% ------------------------------------------------------------------------------ eval-errors [38] 100.0% [41] 2830(1.9%) 0(0.0%) for-loop ...es/herbie/develop/src/points.rkt:210:2 ??? [44] 88.1% ulp-difference [47] 11.9% ------------------------------------------------------------------------------ eval-prog [39] 15.9% f206 [42] 35.6% hash-ref! [52] 48.5% [42] 2088(1.4%) 0(0.0%) f206 .../collects/racket/match/compiler.rkt:507:40 map [45] 48.5% f206 [42] 35.6% bf [50] 12.2% table-ref [46] 3.7% ------------------------------------------------------------------------------ eval-prog [39] 100.0% [43] 296(0.2%) 0(0.0%) temp68_2 (unknown source) compile16 [48] 100.0% ------------------------------------------------------------------------------ loop [23] 0.5% for-loop [41] 1.8% loop [29] 97.8% [44] 142488(95.0%) 614(0.4%) ??? ...tlies/herbie/develop/src/programs.rkt:129:2 ??? [49] 93.8% bf [50] 5.3% ??? [51] 0.4% ------------------------------------------------------------------------------ f206 [42] 100.0% [45] 1012(0.7%) 0(0.0%) map ...acket/collects/racket/private/map.rkt:35:13 hash-ref! [52] 82.5% loop [29] 17.5% ------------------------------------------------------------------------------ type-of [40] 49.5% f206 [42] 50.5% [46] 618(0.4%) 0(0.0%) table-ref ...es/herbie/develop/src/common.rkt:48:0 ??? [53] 100.0% ------------------------------------------------------------------------------ for-loop [41] 100.0% [47] 336(0.2%) 336(0.2%) ulp-difference ...erbie/develop/src/float.rkt:19:0 ------------------------------------------------------------------------------ temp68_2 [43] 100.0% [48] 296(0.2%) 0(0.0%) compile16 (unknown source) temp74_0 [54] 100.0% ------------------------------------------------------------------------------ ??? [44] 100.0% [49] 133706(89.2%) 8162(5.4%) ??? ...acket/collects/racket/private/kw.rkt:592:14 ??? [55] 93.4% ??? [63] 0.2% ------------------------------------------------------------------------------ f206 [42] 9.2% ??? [44] 90.8% [50] 8314(5.5%) 0(0.0%) bf ...ath-lib/math/private/bigfloat/mpfr.rkt:601:2 new-mpfr [96] 71.0% ??? [97] 29.0% ------------------------------------------------------------------------------ location-do [65] 5.4% for-loop [32] 5.4% ??? [44] 21.8% loop [29] 22.4% for-loop [25] 45.0% [51] 2834(1.9%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:357:33 sample-multi-bounded [56] 45.0% ->flonum [57] 44.2% location-do [65] 5.4% ??? [64] 5.4% ------------------------------------------------------------------------------ eval-prog [39] 11.9% localize-error [19] 15.6% map [45] 20.4% loop [29] 52.1% [52] 1934(1.3%) 0(0.0%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [60] 35.8% parse-loop14 [58] 25.0% f206 [42] 25.0% bigfloat-hash [59] 11.9% ??? [62] 2.4% ------------------------------------------------------------------------------ table-ref [46] 100.0% [53] 618(0.4%) 0(0.0%) ??? ...ects/racket/contract/private/list.rkt:798:4 for-loop [61] 100.0% ------------------------------------------------------------------------------ compile16 [48] 100.0% [54] 296(0.2%) 0(0.0%) temp74_0 (unknown source) expand-single [66] 100.0% ------------------------------------------------------------------------------ loop [29] 0.5% ??? [49] 99.5% [55] 125592(83.8%) 690(0.5%) ??? ...tract/private/arrow-higher-order.rkt:361:33 bf-complex-exp [67] 74.0% bf-complex-div [68] 21.1% bf-complex-add [69] 3.3% ------------------------------------------------------------------------------ ??? [51] 100.0% [56] 1276(0.9%) 0(0.0%) sample-multi-bounded ...evelop/src/points.rkt:44:0 loop [70] 100.0% ------------------------------------------------------------------------------ ??? [51] 100.0% [57] 1254(0.8%) 942(0.6%) ->flonum ...s/herbie/develop/src/programs.rkt:36:0 return/no-unsupplied [75] 24.9% ------------------------------------------------------------------------------ hash-ref! [52] 100.0% [58] 1012(0.7%) 0(0.0%) parse-loop14 ...s/racket/match/compiler.rkt:418:15 loop [29] 100.0% ------------------------------------------------------------------------------ hash-ref! [52] 100.0% [59] 922(0.6%) 0(0.0%) bigfloat-hash ...h/private/bigfloat/mpfr.rkt:167:0 bfcanonicalize [71] 100.0% ------------------------------------------------------------------------------ hash-ref! [52] 100.0% [60] 922(0.6%) 0(0.0%) ??? ...tlies/herbie/develop/src/programs.rkt:153:5 loop [29] 100.0% ------------------------------------------------------------------------------ ??? [53] 100.0% [61] 618(0.4%) 306(0.2%) for-loop ...acket/contract/private/list.rkt:804:12 do-chaperone-procedure [76] 50.5% ------------------------------------------------------------------------------ hash-ref! [52] 100.0% [62] 326(0.2%) 0(0.0%) ??? .../herbie/develop/src/core/localize.rkt:22:13 repeat [73] 100.0% ------------------------------------------------------------------------------ ??? [49] 100.0% [63] 316(0.2%) 0(0.0%) ??? ...ects/racket/contract/private/prop.rkt:519:4 ??? [74] 100.0% ------------------------------------------------------------------------------ ??? [51] 100.0% [64] 304(0.2%) 0(0.0%) ??? ...s/herbie/develop/src/core/simplify.rkt:31:0 mk-egraph [77] 100.0% ------------------------------------------------------------------------------ ??? [51] 100.0% [65] 304(0.2%) 0(0.0%) location-do ...erbie/develop/src/programs.rkt:90:0 ??? [51] 100.0% ------------------------------------------------------------------------------ temp74_0 [54] 100.0% [66] 296(0.2%) 0(0.0%) expand-single (unknown source) expand-capturing-lifts [72] 100.0% ------------------------------------------------------------------------------ ??? [55] 100.0% [67] 92924(62.0%) 0(0.0%) bf-complex-exp .../develop/src/bigcomplex.rkt:41:0 ??? [85] 92.8% bf* [78] 7.2% ------------------------------------------------------------------------------ ??? [55] 100.0% [68] 26464(17.6%) 322(0.2%) bf-complex-div .../develop/src/bigcomplex.rkt:58:0 bf* [78] 46.1% ??? [85] 45.0% ...higher-order.rkt:361:33 [79] 7.7% ------------------------------------------------------------------------------ ??? [55] 100.0% [69] 4142(2.8%) 0(0.0%) bf-complex-add .../develop/src/bigcomplex.rkt:24:0 ??? [85] 85.0% ...higher-order.rkt:361:33 [79] 15.0% ------------------------------------------------------------------------------ sample-multi-bounded [56] 100.0% [70] 1276(0.9%) 0(0.0%) loop ...ghtlies/herbie/develop/src/points.rkt:66:6 random-exp [80] 100.0% ------------------------------------------------------------------------------ bigfloat-hash [59] 100.0% [71] 922(0.6%) 922(0.6%) bfcanonicalize .../private/bigfloat/mpfr.rkt:157:0 ------------------------------------------------------------------------------ expand-single [66] 46.8% loop [81] 53.2% [72] 632(0.4%) 0(0.0%) expand-capturing-lifts (unknown source) loop [81] 53.2% lambda-clause-expander [84] 46.8% ------------------------------------------------------------------------------ ??? [62] 100.0% [73] 326(0.2%) 0(0.0%) repeat ...erbie/develop/src/core/localize.rkt:13:0 for-loop [82] 100.0% ------------------------------------------------------------------------------ ??? [63] 100.0% [74] 316(0.2%) 316(0.2%) ??? ...lects/racket/contract/private/orc.rkt:83:14 ------------------------------------------------------------------------------ ->flonum [57] 100.0% [75] 312(0.2%) 312(0.2%) return/no-unsupplied ...ct/private/arr-i.rkt:534:0 ------------------------------------------------------------------------------ for-loop [61] 100.0% [76] 312(0.2%) 312(0.2%) do-chaperone-procedure ...et/private/kw.rkt:1762:2 ------------------------------------------------------------------------------ ??? [64] 100.0% [77] 304(0.2%) 0(0.0%) mk-egraph ...bie/develop/src/core/egraph.rkt:131:0 mk-enode-rec! [83] 100.0% ------------------------------------------------------------------------------ bf-complex-exp [67] 35.3% bf-complex-div [68] 64.7% [78] 18852(12.6%) 0(0.0%) bf* ...ath/private/bigfloat/bigfloat-mpfr.rkt:95:0 ??? [85] 100.0% ------------------------------------------------------------------------------ bf-complex-add [69] 23.4% bf-complex-div [68] 76.6% [79] 2650(1.8%) 0(0.0%) ...higher-order.rkt:361:33 (unknown source) ??? [86] 100.0% ------------------------------------------------------------------------------ loop [70] 100.0% [80] 1276(0.9%) 1276(0.9%) random-exp .../herbie/develop/src/common.rkt:244:0 ------------------------------------------------------------------------------ loop [81] 17.7% expand-capturing-lifts [72] 17.7% eval-prog [39] 17.7% syntax-e/no-taint [7] 23.4% for-loop [93] 23.4% [81] 632(0.4%) 0(0.0%) loop (unknown source) expand-id-application-form17 [2] 23.4% gf [88] 23.4% expand-capturing-lifts [72] 17.7% loop [81] 17.7% for-loop [93] 17.7% ------------------------------------------------------------------------------ repeat [73] 100.0% [82] 326(0.2%) 326(0.2%) for-loop ...bie/develop/src/core/localize.rkt:14:2 ------------------------------------------------------------------------------ mk-egraph [77] 25.0% mk-enode-rec! [83] 75.0% [83] 304(0.2%) 0(0.0%) mk-enode-rec! ...develop/src/core/egraph.rkt:122:0 mk-enode-rec! [83] 75.0% mk-enode! [87] 25.0% ------------------------------------------------------------------------------ expand-capturing-lifts [72] 100.0% [84] 296(0.2%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [89] 100.0% ------------------------------------------------------------------------------ bf-complex-add [69] 2.9% bf-complex-div [68] 9.8% bf* [78] 15.5% bf-complex-exp [67] 70.8% [85] 121930(81.3%) 81356(54.3%) ??? ...-racket/utils/simple-result-arrow.rkt:39:12 bfmul [90] 21.9% bfcos [91] 11.3% ------------------------------------------------------------------------------ ...higher-order.rkt:361:33 [79] 100.0% [86] 2650(1.8%) 692(0.5%) ??? ...cts/racket/contract/private/list.rkt:209:10 ??? [92] 73.9% ------------------------------------------------------------------------------ mk-enode-rec! [83] 100.0% [87] 304(0.2%) 0(0.0%) mk-enode! ...bie/develop/src/core/egraph.rkt:102:0 new-enode [94] 100.0% ------------------------------------------------------------------------------ loop [81] 100.0% [88] 296(0.2%) 0(0.0%) gf (unknown source) propagation-apply [95] 100.0% ------------------------------------------------------------------------------ lambda-clause-expander [84] 14.3% for-loop [93] 85.7% [89] 296(0.2%) 0(0.0%) finish-bodys (unknown source) for-loop [93] 100.0% ------------------------------------------------------------------------------ ??? [85] 100.0% [90] 26748(17.8%) 1952(1.3%) bfmul ...-lib/math/private/bigfloat/mpfr.rkt:821:4 new-mpfr [96] 68.2% ??? [97] 24.5% ------------------------------------------------------------------------------ ??? [85] 100.0% [91] 13826(9.2%) 0(0.0%) bfcos ...-lib/math/private/bigfloat/mpfr.rkt:618:4 new-mpfr [96] 68.1% ??? [97] 31.9% ------------------------------------------------------------------------------ ??? [86] 100.0% [92] 1958(1.3%) 1958(1.3%) ??? ...ects/racket/contract/private/guts.rkt:746:8 ------------------------------------------------------------------------------ temp37_0 [99] 17.7% run-module-instance!125 [100] 17.7% loop [81] 17.7% finish-bodys [89] 46.8% [93] 632(0.4%) 0(0.0%) for-loop (unknown source) finish-bodys [89] 40.1% run-module-instance!125 [100] 17.7% temp37_0 [99] 17.7% module-path-index-resolve [98] 17.7% loop [81] 6.7% ------------------------------------------------------------------------------ mk-enode! [87] 100.0% [94] 304(0.2%) 0(0.0%) new-enode ...erbie/develop/src/core/enode.rkt:95:0 type-of-enode-expr [101] 100.0% ------------------------------------------------------------------------------ gf [88] 100.0% [95] 296(0.2%) 296(0.2%) propagation-apply (unknown source) ------------------------------------------------------------------------------ bf [50] 17.6% bfcos [91] 28.1% bfmul [90] 54.4% [96] 33574(22.4%) 33574(22.4%) new-mpfr ...b/math/private/bigfloat/mpfr.rkt:335:0 ------------------------------------------------------------------------------ bf [50] 18.1% bfcos [91] 33.0% bfmul [90] 49.0% [97] 13362(8.9%) 13362(8.9%) ??? /home/p92/racket/collects/ffi/unsafe.rkt:898:4 ------------------------------------------------------------------------------ module-path-index-resolve [98] 50.0% for-loop [93] 50.0% [98] 336(0.2%) 0(0.0%) module-path-index-resolve (unknown source) module-path-index-resolve [98] 50.0% standard-module-name-resolver [102] 50.0% ------------------------------------------------------------------------------ for-loop [93] 100.0% [99] 336(0.2%) 0(0.0%) temp37_0 (unknown source) for-loop [93] 100.0% ------------------------------------------------------------------------------ for-loop [93] 100.0% [100] 336(0.2%) 0(0.0%) run-module-instance!125 (unknown source) for-loop [93] 100.0% ------------------------------------------------------------------------------ new-enode [94] 100.0% [101] 304(0.2%) 0(0.0%) type-of-enode-expr ...elop/src/core/enode.rkt:68:0 ??? [103] 100.0% ------------------------------------------------------------------------------ module-path-index-resolve [98] 100.0% [102] 336(0.2%) 336(0.2%) standard-module-name-resolver (unknown source) ------------------------------------------------------------------------------ type-of-enode-expr [101] 100.0% [103] 304(0.2%) 0(0.0%) ??? ...ects/racket/contract/private/hash.rkt:227:4 contract-pos/neg-doubling/proc [104]100.0% ------------------------------------------------------------------------------ ??? [103] 100.0% [104] 304(0.2%) 304(0.2%) contract-pos/neg-doubling/proc ...e/guts.rkt:956:0 ------------------------------------------------------------------------------