enums.h
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:13k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: enums.h,v 1.145.2.1 1999/02/12 22:13:56 wessels Exp $
  3.  *
  4.  *
  5.  * SQUID Internet Object Cache  http://squid.nlanr.net/Squid/
  6.  * ----------------------------------------------------------
  7.  *
  8.  *  Squid is the result of efforts by numerous individuals from the
  9.  *  Internet community.  Development is led by Duane Wessels of the
  10.  *  National Laboratory for Applied Network Research and funded by the
  11.  *  National Science Foundation.  Squid is Copyrighted (C) 1998 by
  12.  *  Duane Wessels and the University of California San Diego.  Please
  13.  *  see the COPYRIGHT file for full details.  Squid incorporates
  14.  *  software developed and/or copyrighted by other sources.  Please see
  15.  *  the CREDITS file for full details.
  16.  *
  17.  *  This program is free software; you can redistribute it and/or modify
  18.  *  it under the terms of the GNU General Public License as published by
  19.  *  the Free Software Foundation; either version 2 of the License, or
  20.  *  (at your option) any later version.
  21.  *  
  22.  *  This program is distributed in the hope that it will be useful,
  23.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  24.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  25.  *  GNU General Public License for more details.
  26.  *  
  27.  *  You should have received a copy of the GNU General Public License
  28.  *  along with this program; if not, write to the Free Software
  29.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
  30.  *
  31.  */
  32. typedef enum {
  33.     LOG_TAG_NONE,
  34.     LOG_TCP_HIT,
  35.     LOG_TCP_MISS,
  36.     LOG_TCP_REFRESH_HIT,
  37.     LOG_TCP_REFRESH_FAIL_HIT,
  38.     LOG_TCP_REFRESH_MISS,
  39.     LOG_TCP_CLIENT_REFRESH_MISS,
  40.     LOG_TCP_IMS_HIT,
  41.     LOG_TCP_SWAPFAIL_MISS,
  42.     LOG_TCP_NEGATIVE_HIT,
  43.     LOG_TCP_MEM_HIT,
  44.     LOG_TCP_DENIED,
  45.     LOG_TCP_OFFLINE_HIT,
  46.     LOG_UDP_HIT,
  47.     LOG_UDP_MISS,
  48.     LOG_UDP_DENIED,
  49.     LOG_UDP_INVALID,
  50.     LOG_UDP_MISS_NOFETCH,
  51.     LOG_ICP_QUERY,
  52.     LOG_TYPE_MAX
  53. } log_type;
  54. typedef enum {
  55.     ERR_NONE,
  56.     ERR_READ_TIMEOUT,
  57.     ERR_LIFETIME_EXP,
  58.     ERR_READ_ERROR,
  59.     ERR_WRITE_ERROR,
  60.     ERR_SHUTTING_DOWN,
  61.     ERR_CONNECT_FAIL,
  62.     ERR_INVALID_REQ,
  63.     ERR_UNSUP_REQ,
  64.     ERR_INVALID_URL,
  65.     ERR_SOCKET_FAILURE,
  66.     ERR_DNS_FAIL,
  67.     ERR_CANNOT_FORWARD,
  68.     ERR_FORWARDING_DENIED,
  69.     ERR_NO_RELAY,
  70.     ERR_ZERO_SIZE_OBJECT,
  71.     ERR_FTP_DISABLED,
  72.     ERR_FTP_FAILURE,
  73.     ERR_URN_RESOLVE,
  74.     ERR_ACCESS_DENIED,
  75.     ERR_CACHE_ACCESS_DENIED,
  76.     ERR_CACHE_MGR_ACCESS_DENIED,
  77.     ERR_SQUID_SIGNATURE, /* not really an error */
  78.     ERR_FTP_PUT_CREATED, /* !error,a note that the file was created */
  79.     ERR_FTP_PUT_MODIFIED, /* modified, !created */
  80.     ERR_FTP_PUT_ERROR,
  81.     ERR_FTP_NOT_FOUND,
  82.     ERR_FTP_FORBIDDEN,
  83.     ERR_FTP_UNAVAILABLE,
  84.     ERR_ONLY_IF_CACHED_MISS, /* failure to satisfy only-if-cached request */
  85.     ERR_MAX
  86. } err_type;
  87. typedef enum {
  88.     ACL_NONE,
  89.     ACL_SRC_IP,
  90.     ACL_DST_IP,
  91.     ACL_MY_IP,
  92.     ACL_SRC_DOMAIN,
  93.     ACL_DST_DOMAIN,
  94.     ACL_SRC_DOM_REGEX,
  95.     ACL_DST_DOM_REGEX,
  96.     ACL_TIME,
  97.     ACL_URLPATH_REGEX,
  98.     ACL_URL_REGEX,
  99.     ACL_URL_PORT,
  100. #if USE_IDENT
  101.     ACL_IDENT,
  102. #endif
  103.     ACL_PROTO,
  104.     ACL_METHOD,
  105.     ACL_BROWSER,
  106.     ACL_PROXY_AUTH,
  107.     ACL_SRC_ASN,
  108.     ACL_DST_ASN,
  109.     ACL_SRC_ARP,
  110.     ACL_SNMP_COMMUNITY,
  111.     ACL_NETDB_SRC_RTT,
  112.     ACL_ENUM_MAX
  113. } squid_acl;
  114. typedef enum {
  115.     ACL_LOOKUP_NONE,
  116.     ACL_LOOKUP_NEEDED,
  117.     ACL_LOOKUP_PENDING,
  118.     ACL_LOOKUP_DONE,
  119.     ACL_PROXY_AUTH_NEEDED
  120. } acl_lookup_state;
  121. enum {
  122.     FD_NONE,
  123.     FD_LOG,
  124.     FD_FILE,
  125.     FD_SOCKET,
  126.     FD_PIPE,
  127.     FD_UNKNOWN
  128. };
  129. enum {
  130.     FD_READ,
  131.     FD_WRITE
  132. };
  133. enum {
  134.     FQDN_CACHED,
  135.     FQDN_NEGATIVE_CACHED,
  136.     FQDN_PENDING, /* waiting to be dispatched */
  137.     FQDN_DISPATCHED /* waiting for reply from dnsserver */
  138. };
  139. typedef unsigned int fqdncache_status_t;
  140. enum {
  141.     IP_CACHED,
  142.     IP_NEGATIVE_CACHED,
  143.     IP_PENDING, /* waiting to be dispatched */
  144.     IP_DISPATCHED /* waiting for reply from dnsserver */
  145. };
  146. typedef unsigned int ipcache_status_t;
  147. typedef enum {
  148.     PEER_NONE,
  149.     PEER_SIBLING,
  150.     PEER_PARENT,
  151.     PEER_MULTICAST
  152. } peer_t;
  153. typedef enum {
  154.     PEER_SA_NONE,
  155.     PEER_SA_DIGEST,
  156.     PEER_SA_ICP,
  157.     PEER_SA_NETDB
  158. } peer_select_alg_t;
  159. typedef enum {
  160.     LOOKUP_NONE,
  161.     LOOKUP_HIT,
  162.     LOOKUP_MISS
  163. } lookup_t;
  164. /* recognized or "known" header fields; @?@ add more! */
  165. typedef enum {
  166.     HDR_ACCEPT,
  167.     HDR_ACCEPT_CHARSET,
  168.     HDR_ACCEPT_ENCODING,
  169.     HDR_ACCEPT_LANGUAGE,
  170.     HDR_ACCEPT_RANGES,
  171.     HDR_AGE,
  172.     HDR_ALLOW,
  173.     HDR_AUTHORIZATION,
  174.     HDR_CACHE_CONTROL,
  175.     HDR_CONNECTION,
  176.     HDR_CONTENT_BASE,
  177.     HDR_CONTENT_ENCODING,
  178.     HDR_CONTENT_LANGUAGE,
  179.     HDR_CONTENT_LENGTH,
  180.     HDR_CONTENT_LOCATION,
  181.     HDR_CONTENT_MD5,
  182.     HDR_CONTENT_RANGE,
  183.     HDR_CONTENT_TYPE,
  184.     HDR_DATE,
  185.     HDR_ETAG,
  186.     HDR_EXPIRES,
  187.     HDR_FROM,
  188.     HDR_HOST,
  189.     HDR_IF_MATCH,
  190.     HDR_IF_MODIFIED_SINCE,
  191.     HDR_IF_NONE_MATCH,
  192.     HDR_IF_RANGE,
  193.     HDR_LAST_MODIFIED,
  194.     HDR_LINK,
  195.     HDR_LOCATION,
  196.     HDR_MAX_FORWARDS,
  197.     HDR_MIME_VERSION,
  198.     HDR_PRAGMA,
  199.     HDR_PROXY_AUTHENTICATE,
  200.     HDR_PROXY_AUTHORIZATION,
  201.     HDR_PROXY_CONNECTION,
  202.     HDR_PUBLIC,
  203.     HDR_RANGE,
  204.     HDR_REQUEST_RANGE, /* some clients use this, sigh */
  205.     HDR_REFERER,
  206.     HDR_RETRY_AFTER,
  207.     HDR_SERVER,
  208.     HDR_SET_COOKIE,
  209.     HDR_TITLE,
  210.     HDR_UPGRADE,
  211.     HDR_USER_AGENT,
  212.     HDR_VARY,
  213.     HDR_VIA,
  214.     HDR_WARNING,
  215.     HDR_WWW_AUTHENTICATE,
  216.     HDR_X_CACHE,
  217.     HDR_X_CACHE_LOOKUP, /* tmp hack, remove later */
  218.     HDR_X_FORWARDED_FOR,
  219.     HDR_X_REQUEST_URI, /* appended if ADD_X_REQUEST_URI is #defined */
  220.     HDR_X_SQUID_ERROR,
  221.     HDR_OTHER,
  222.     HDR_ENUM_END
  223. } http_hdr_type;
  224. /* server cache-control */
  225. typedef enum {
  226.     CC_PUBLIC,
  227.     CC_PRIVATE,
  228.     CC_NO_CACHE,
  229.     CC_NO_STORE,
  230.     CC_NO_TRANSFORM,
  231.     CC_MUST_REVALIDATE,
  232.     CC_PROXY_REVALIDATE,
  233.     CC_MAX_AGE,
  234.     CC_ONLY_IF_CACHED,
  235.     CC_OTHER,
  236.     CC_ENUM_END
  237. } http_hdr_cc_type;
  238. /* possible types for http header fields */
  239. typedef enum {
  240.     ftInvalid = HDR_ENUM_END, /* to catch nasty errors with hdr_id<->fld_type clashes */
  241.     ftInt,
  242.     ftStr,
  243.     ftDate_1123,
  244.     ftETag,
  245.     ftPCc,
  246.     ftPContRange,
  247.     ftPRange,
  248.     ftDate_1123_or_ETag
  249. } field_type;
  250. /* possible owners of http header */
  251. typedef enum {
  252.     hoNone,
  253. #if USE_HTCP
  254.     hoHtcpReply,
  255. #endif
  256.     hoRequest,
  257.     hoReply
  258. } http_hdr_owner_type;
  259. typedef enum {
  260.     HIER_NONE,
  261.     DIRECT,
  262.     SIBLING_HIT,
  263.     PARENT_HIT,
  264.     DEFAULT_PARENT,
  265.     SINGLE_PARENT,
  266.     FIRSTUP_PARENT,
  267.     FIRST_PARENT_MISS,
  268.     CLOSEST_PARENT_MISS,
  269.     CLOSEST_PARENT,
  270.     CLOSEST_DIRECT,
  271.     NO_DIRECT_FAIL,
  272.     SOURCE_FASTEST,
  273.     ROUNDROBIN_PARENT,
  274. #if USE_CACHE_DIGESTS
  275.     CACHE_DIGEST_HIT,
  276. #endif
  277. #if USE_CARP
  278.     CARP,
  279. #endif
  280.     ANY_OLD_PARENT,
  281.     HIER_MAX
  282. } hier_code;
  283. typedef enum {
  284.     ICP_INVALID,
  285.     ICP_QUERY,
  286.     ICP_HIT,
  287.     ICP_MISS,
  288.     ICP_ERR,
  289.     ICP_SEND,
  290.     ICP_SENDA,
  291.     ICP_DATABEG,
  292.     ICP_DATA,
  293.     ICP_DATAEND,
  294.     ICP_SECHO,
  295.     ICP_DECHO,
  296.     ICP_UNUSED12,
  297.     ICP_UNUSED13,
  298.     ICP_UNUSED14,
  299.     ICP_UNUSED15,
  300.     ICP_UNUSED16,
  301.     ICP_UNUSED17,
  302.     ICP_UNUSED18,
  303.     ICP_UNUSED19,
  304.     ICP_UNUSED20,
  305.     ICP_MISS_NOFETCH,
  306.     ICP_DENIED,
  307.     ICP_HIT_OBJ,
  308.     ICP_END
  309. } icp_opcode;
  310. enum {
  311.     NOT_IN_MEMORY,
  312.     IN_MEMORY
  313. };
  314. enum {
  315.     PING_NONE,
  316.     PING_WAITING,
  317.     PING_TIMEOUT,
  318.     PING_DONE
  319. };
  320. enum {
  321.     STORE_OK,
  322.     STORE_PENDING
  323. };
  324. enum {
  325.     SWAPOUT_NONE,
  326.     SWAPOUT_OPENING,
  327.     SWAPOUT_WRITING,
  328.     SWAPOUT_DONE
  329. };
  330. typedef enum {
  331.     STORE_NON_CLIENT,
  332.     STORE_MEM_CLIENT,
  333.     STORE_DISK_CLIENT
  334. } store_client_t;
  335. enum {
  336.     METHOD_NONE, /* 000 */
  337.     METHOD_GET, /* 001 */
  338.     METHOD_POST, /* 010 */
  339.     METHOD_PUT, /* 011 */
  340.     METHOD_HEAD, /* 100 */
  341.     METHOD_CONNECT, /* 101 */
  342.     METHOD_TRACE, /* 110 */
  343.     METHOD_PURGE, /* 111 */
  344.     METHOD_ENUM_END
  345. };
  346. typedef unsigned int method_t;
  347. typedef enum {
  348.     PROTO_NONE,
  349.     PROTO_HTTP,
  350.     PROTO_FTP,
  351.     PROTO_GOPHER,
  352.     PROTO_WAIS,
  353.     PROTO_CACHEOBJ,
  354.     PROTO_ICP,
  355. #if USE_HTCP
  356.     PROTO_HTCP,
  357. #endif
  358.     PROTO_URN,
  359.     PROTO_WHOIS,
  360.     PROTO_INTERNAL,
  361.     PROTO_HTTPS,
  362.     PROTO_MAX
  363. } protocol_t;
  364. typedef enum {
  365.     HTTP_STATUS_NONE = 0,
  366.     HTTP_CONTINUE = 100,
  367.     HTTP_SWITCHING_PROTOCOLS = 101,
  368.     HTTP_OK = 200,
  369.     HTTP_CREATED = 201,
  370.     HTTP_ACCEPTED = 202,
  371.     HTTP_NON_AUTHORITATIVE_INFORMATION = 203,
  372.     HTTP_NO_CONTENT = 204,
  373.     HTTP_RESET_CONTENT = 205,
  374.     HTTP_PARTIAL_CONTENT = 206,
  375.     HTTP_MULTIPLE_CHOICES = 300,
  376.     HTTP_MOVED_PERMANENTLY = 301,
  377.     HTTP_MOVED_TEMPORARILY = 302,
  378.     HTTP_SEE_OTHER = 303,
  379.     HTTP_NOT_MODIFIED = 304,
  380.     HTTP_USE_PROXY = 305,
  381.     HTTP_BAD_REQUEST = 400,
  382.     HTTP_UNAUTHORIZED = 401,
  383.     HTTP_PAYMENT_REQUIRED = 402,
  384.     HTTP_FORBIDDEN = 403,
  385.     HTTP_NOT_FOUND = 404,
  386.     HTTP_METHOD_NOT_ALLOWED = 405,
  387.     HTTP_NOT_ACCEPTABLE = 406,
  388.     HTTP_PROXY_AUTHENTICATION_REQUIRED = 407,
  389.     HTTP_REQUEST_TIMEOUT = 408,
  390.     HTTP_CONFLICT = 409,
  391.     HTTP_GONE = 410,
  392.     HTTP_LENGTH_REQUIRED = 411,
  393.     HTTP_PRECONDITION_FAILED = 412,
  394.     HTTP_REQUEST_ENTITY_TOO_LARGE = 413,
  395.     HTTP_REQUEST_URI_TOO_LARGE = 414,
  396.     HTTP_UNSUPPORTED_MEDIA_TYPE = 415,
  397.     HTTP_INTERNAL_SERVER_ERROR = 500,
  398.     HTTP_NOT_IMPLEMENTED = 501,
  399.     HTTP_BAD_GATEWAY = 502,
  400.     HTTP_SERVICE_UNAVAILABLE = 503,
  401.     HTTP_GATEWAY_TIMEOUT = 504,
  402.     HTTP_HTTP_VERSION_NOT_SUPPORTED = 505,
  403.     HTTP_INVALID_HEADER = 600 /* Squid header parsing error */
  404. } http_status;
  405. /*
  406.  * These are for StoreEntry->flag, which is defined as a SHORT
  407.  *
  408.  * NOTE: These flags are written to swap.state, so think very carefully
  409.  * about deleting or re-assigning!
  410.  */
  411. enum {
  412.     ENTRY_SPECIAL,
  413.     ENTRY_REVALIDATE,
  414.     DELAY_SENDING,
  415.     RELEASE_REQUEST,
  416.     REFRESH_REQUEST,
  417.     ENTRY_CACHABLE,
  418.     ENTRY_DISPATCHED,
  419.     KEY_PRIVATE,
  420.     ENTRY_FWD_HDR_WAIT,
  421.     ENTRY_NEGCACHED,
  422.     ENTRY_VALIDATED,
  423.     ENTRY_BAD_LENGTH,
  424.     ENTRY_ABORTED
  425. };
  426. typedef enum {
  427.     ACCESS_DENIED,
  428.     ACCESS_ALLOWED,
  429.     ACCESS_REQ_PROXY_AUTH
  430. } allow_t;
  431. #if SQUID_SNMP
  432. enum {
  433.     SNMP_C_VIEW,
  434.     SNMP_C_USER,
  435.     SNMP_C_COMMUNITY
  436. };
  437. #endif
  438. typedef enum {
  439.     MEM_NONE,
  440.     MEM_2K_BUF,
  441.     MEM_4K_BUF,
  442.     MEM_8K_BUF,
  443.     MEM_ACCESSLOGENTRY,
  444.     MEM_ACL,
  445.     MEM_ACLCHECK_T,
  446.     MEM_ACL_ACCESS,
  447.     MEM_ACL_DENY_INFO_LIST,
  448.     MEM_ACL_IP_DATA,
  449.     MEM_ACL_LIST,
  450.     MEM_ACL_NAME_LIST,
  451.     MEM_ACL_PROXY_AUTH_USER,
  452.     MEM_ACL_TIME_DATA,
  453.     MEM_AIO_RESULT_T,
  454.     MEM_CACHEMGR_PASSWD,
  455. #if USE_CACHE_DIGESTS
  456.     MEM_CACHE_DIGEST,
  457. #endif
  458.     MEM_CLIENTHTTPREQUEST,
  459.     MEM_CLIENT_INFO,
  460.     MEM_CLIENT_SOCK_BUF,
  461.     MEM_CLOSE_HANDLER,
  462.     MEM_COMMWRITESTATEDATA,
  463.     MEM_CONNSTATEDATA,
  464. #if USE_CACHE_DIGESTS
  465.     MEM_DIGEST_FETCH_STATE,
  466. #endif
  467.     MEM_DISK_BUF,
  468.     MEM_DLINK_LIST,
  469.     MEM_DLINK_NODE,
  470.     MEM_DNSSERVER_T,
  471.     MEM_DNSSTATDATA,
  472.     MEM_DOMAIN_PING,
  473.     MEM_DOMAIN_TYPE,
  474.     MEM_DONTFREE,
  475.     MEM_DREAD_CTRL,
  476.     MEM_DWRITE_Q,
  477.     MEM_ERRORSTATE,
  478.     MEM_FILEMAP,
  479.     MEM_FQDNCACHE_ENTRY,
  480.     MEM_FQDNCACHE_PENDING,
  481.     MEM_FWD_SERVER,
  482.     MEM_FWD_STATE,
  483.     MEM_HASH_LINK,
  484.     MEM_HASH_TABLE,
  485.     MEM_HELPER,
  486.     MEM_HELPER_REQUEST,
  487.     MEM_HELPER_SERVER,
  488.     MEM_HIERARCHYLOGENTRY,
  489.     MEM_HTTP_HDR_CC,
  490.     MEM_HTTP_HDR_CONTENT_RANGE,
  491.     MEM_HTTP_HDR_ENTRY,
  492.     MEM_HTTP_HDR_RANGE,
  493.     MEM_HTTP_HDR_RANGE_SPEC,
  494.     MEM_HTTP_REPLY,
  495.     MEM_HTTP_STATE_DATA,
  496.     MEM_ICPUDPDATA,
  497.     MEM_ICP_COMMON_T,
  498.     MEM_ICP_PING_DATA,
  499.     MEM_INTLIST,
  500.     MEM_IOSTATS,
  501.     MEM_IPCACHE_ENTRY,
  502.     MEM_IPCACHE_PENDING,
  503.     MEM_MD5_DIGEST,
  504.     MEM_MEMOBJECT,
  505.     MEM_MEM_NODE,
  506.     MEM_NETDBENTRY,
  507.     MEM_NET_DB_NAME,
  508.     MEM_NET_DB_PEER,
  509.     MEM_PEER,
  510. #if USE_CACHE_DIGESTS
  511.     MEM_PEER_DIGEST,
  512. #endif
  513.     MEM_PINGERECHODATA,
  514.     MEM_PINGERREPLYDATA,
  515.     MEM_PS_STATE,
  516.     MEM_REFRESH_T,
  517.     MEM_RELIST,
  518.     MEM_REQUEST_T,
  519.     MEM_SQUIDCONFIG,
  520.     MEM_SQUIDCONFIG2,
  521.     MEM_STATCOUNTERS,
  522.     MEM_STMEM_BUF,
  523.     MEM_STOREENTRY,
  524.     MEM_STORE_CLIENT,
  525.     MEM_SWAPDIR,
  526.     MEM_USHORTLIST,
  527.     MEM_WORDLIST,
  528.     MEM_MAX
  529. } mem_type;
  530. /*
  531.  * NOTE!  We must preserve the order of this list!
  532.  */
  533. enum {
  534.     STORE_META_VOID, /* should not come up */
  535.     STORE_META_KEY_URL, /* key w/ keytype */
  536.     STORE_META_KEY_SHA,
  537.     STORE_META_KEY_MD5,
  538.     STORE_META_URL, /* the url , if not in the header */
  539.     STORE_META_STD, /* standard metadata */
  540.     STORE_META_HITMETERING, /* reserved for hit metering */
  541.     STORE_META_VALID,
  542.     STORE_META_END
  543. };
  544. enum {
  545.     STORE_LOG_CREATE,
  546.     STORE_LOG_SWAPIN,
  547.     STORE_LOG_SWAPOUT,
  548.     STORE_LOG_RELEASE
  549. };
  550. typedef enum {
  551.     SWAP_LOG_NOP,
  552.     SWAP_LOG_ADD,
  553.     SWAP_LOG_DEL,
  554.     SWAP_LOG_MAX
  555. } swap_log_op;
  556. /* parse state of HttpReply or HttpRequest */
  557. typedef enum {
  558.     psReadyToParseStartLine = 0,
  559.     psReadyToParseHeaders,
  560.     psParsed,
  561.     psError
  562. } HttpMsgParseState;
  563. enum {
  564.     MEDIAN_HTTP,
  565.     MEDIAN_ICP_QUERY,
  566.     MEDIAN_DNS,
  567.     MEDIAN_HIT,
  568.     MEDIAN_MISS,
  569.     MEDIAN_NM,
  570.     MEDIAN_NH,
  571.     MEDIAN_ICP_REPLY
  572. };
  573. enum {
  574.     SENT,
  575.     RECV
  576. };
  577. /*
  578.  * These are field indicators for raw cache-cache netdb transfers
  579.  */
  580. enum {
  581.     NETDB_EX_NONE,
  582.     NETDB_EX_NETWORK,
  583.     NETDB_EX_RTT,
  584.     NETDB_EX_HOPS
  585. };