From unknown Wed Jun 18 23:14:33 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#21020 <21020@debbugs.gnu.org> To: bug#21020 <21020@debbugs.gnu.org> Subject: Status: 24.4; `display-time-world' tampers with TZ Reply-To: bug#21020 <21020@debbugs.gnu.org> Date: Thu, 19 Jun 2025 06:14:33 +0000 retitle 21020 24.4; `display-time-world' tampers with TZ reassign 21020 emacs submitter 21020 William G. Gardella severity 21020 normal tag 21020 patch thanks From debbugs-submit-bounces@debbugs.gnu.org Thu Jul 09 15:40:24 2015 Received: (at submit) by debbugs.gnu.org; 9 Jul 2015 19:40:24 +0000 Received: from localhost ([127.0.0.1]:45494 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZDHgC-0003Kg-Ps for submit@debbugs.gnu.org; Thu, 09 Jul 2015 15:40:23 -0400 Received: from eggs.gnu.org ([208.118.235.92]:57330) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZDHg8-0003KO-BR for submit@debbugs.gnu.org; Thu, 09 Jul 2015 15:40:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZDHfy-0005wo-Va for submit@debbugs.gnu.org; Thu, 09 Jul 2015 15:40:10 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,UNPARSEABLE_RELAY autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:43312) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDHfy-0005wg-TD for submit@debbugs.gnu.org; Thu, 09 Jul 2015 15:40:06 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42583) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDHfw-0007n4-07 for bug-gnu-emacs@gnu.org; Thu, 09 Jul 2015 15:40:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZDHfs-0005e0-Lr for bug-gnu-emacs@gnu.org; Thu, 09 Jul 2015 15:40:03 -0400 Received: from mx1.riseup.net ([198.252.153.129]:44932) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDHfs-0005bl-9k for bug-gnu-emacs@gnu.org; Thu, 09 Jul 2015 15:40:00 -0400 Received: from berryeater.riseup.net (berryeater-pn.riseup.net [10.0.1.120]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client CN "*.riseup.net", Issuer "COMODO RSA Domain Validation Secure Server CA" (verified OK)) by mx1.riseup.net (Postfix) with ESMTPS id 8A57340E6D for ; Thu, 9 Jul 2015 19:39:58 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: wgreenhouse) with ESMTPSA id E658A400C3 From: William G. Gardella To: bug-gnu-emacs@gnu.org Subject: 24.4; `display-time-world' tampers with TZ Date: Thu, 09 Jul 2015 19:39:51 +0000 Message-ID: <87twtd9l2w.fsf@example.com> MIME-Version: 1.0 Content-Type: text/plain X-Virus-Scanned: clamav-milter 0.98.7 at mx1 X-Virus-Status: Clean X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -5.0 (-----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.0 (-----) I use `set-time-zone-rule' to run emacs with an altered time zone for the sake of having a local clock in the modeline via `display-time-mode' on a system that overall uses UTC time. However, `display-time-world' (in the `display-time-world-display' function, and also the initialization for the variable `display-time-world-list') resets the time zone using the TZ environment variable, and attempts to restore the time zone from there, while ignoring any value that might have been set by the user using `set-time-zone-rule'. Recipe: (display-time-mode 1) (set-time-zone-rule "some tz string different than system's TZ") (display-time-event-handler) ;; Time should now be localized to the TZ passed to`set-time-zone-rule' (display-time-world) (display-time-event-handler) ;; We're in a different TZ now! To make matters worse, if one attempts to manually correct Emacs's displayed time to the desired TZ after invoking (display-time-world), display-time-world-timer continually overwrites it until canceled. In GNU Emacs 24.4.1 (x86_64-slackware-linux-gnu) of 2015-03-06 on aporia Windowing system distributor `The X.Org Foundation', version 11.0.11403000 Configured using: `configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --program-prefix= --program-suffix= --mandir=/usr/man --infodir=/usr/info --without-gconf --without-gsettings --with-x --with-x-toolkit=no --with-m17n-flt --build=x86_64-slackware-linux 'CFLAGS=-O2 -fPIC'' Important settings: value of $LC_COLLATE: C value of $LANG: en_US.UTF-8 locale-coding-system: utf-8-unix Major mode: ERC Minor modes in effect: semantic-minor-modes-format: ((:eval (if (or semantic-highlight-edits-mode semantic-show-unmatched-syntax-mode semantic-idle-scheduler-mode) S))) pdf-occur-global-minor-mode: t erc-services-mode: t erc-autoaway-mode: t erc-dcc-mode: t global-rainbow-delimiters-mode: t rainbow-delimiters-mode: t show-paren-mode: t electric-pair-mode: t winner-mode: t display-time-mode: t recentf-mode: t savehist-mode: t xterm-mouse-mode: t global-magit-wip-save-mode: t magit-auto-revert-mode: t shell-dirtrack-mode: t diff-auto-refine-mode: t erc-list-mode: t erc-menu-mode: t erc-autojoin-mode: t erc-ring-mode: t erc-networks-mode: t erc-pcomplete-mode: t erc-match-mode: t erc-netsplit-mode: t erc-hl-nicks-mode: t erc-button-mode: t erc-fill-mode: t erc-stamp-mode: t erc-irccontrols-mode: t erc-noncommands-mode: t erc-keep-place-mode: t erc-move-to-prompt-mode: t erc-readonly-mode: t electric-indent-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t transient-mark-mode: t Recent input: y SPC u s e c a s e SPC i f SPC y o u ' r e SPC i n t e r e s t e d SPC i s SPC t h a t SPC I SPC p r e f e r SPC t h e SPC o v e r a l l SPC s y s t e m SPC ( SPC SPC ( b r o w s s e r s , SPC s t u f f SPC l i k SPC e SPC w g e t , SPC o u t g o i n g SPC m a i l , SPC e t c . C-a C-e C-a C-e SPC t o SPC u s e SPC U T C S-SPC f o r SPC p r i v a c y SPC r e a s o n s C-a b u t SPC I SPC u s e SPC e m a c s ' s SPC m o d e l i n e SPC a s SPC a SPC c l o c k s-f C-s b a u d C-s C-s C-g C-g C-h v b a u d s-b q e h e h s-b e h e h e C-h v b a u d - r s-f q M-< C-s d i s p l a y - t i m e - w o r l d - d i s p C-v s-b C-x C-g M-x r e p o r t - e m a c s - b u f g Recent messages: Mark saved where search started Mark set delete-backward-char: Text is read-only Quit [3 times] Type "q" in help window to restore its previous buffer. call-interactively: Buffer is read-only: # [3 times] Type "q" in help window to restore its previous buffer. Mark set Mark saved where search started C-x C-g is undefined Load-path shadows: /usr/share/emacs/site-lisp/t-mouse hides /usr/share/emacs/24.4/lisp/t-mouse /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-clojure hides /usr/share/emacs/24.4/lisp/org/ob-clojure /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-asymptote hides /usr/share/emacs/24.4/lisp/org/ob-asymptote /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-lisp hides /usr/share/emacs/24.4/lisp/org/ob-lisp /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-lob hides /usr/share/emacs/24.4/lisp/org/ob-lob /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-gnuplot hides /usr/share/emacs/24.4/lisp/org/ob-gnuplot /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-bibtex hides /usr/share/emacs/24.4/lisp/org/org-bibtex /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-haskell hides /usr/share/emacs/24.4/lisp/org/ob-haskell /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-C hides /usr/share/emacs/24.4/lisp/org/ob-C /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-js hides /usr/share/emacs/24.4/lisp/org/ob-js /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-mhe hides /usr/share/emacs/24.4/lisp/org/org-mhe /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-html hides /usr/share/emacs/24.4/lisp/org/ox-html /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-icalendar hides /usr/share/emacs/24.4/lisp/org/ox-icalendar /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-matlab hides /usr/share/emacs/24.4/lisp/org/ob-matlab /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-fortran hides /usr/share/emacs/24.4/lisp/org/ob-fortran /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-protocol hides /usr/share/emacs/24.4/lisp/org/org-protocol /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-ctags hides /usr/share/emacs/24.4/lisp/org/org-ctags /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-scala hides /usr/share/emacs/24.4/lisp/org/ob-scala /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-picolisp hides /usr/share/emacs/24.4/lisp/org/ob-picolisp /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-entities hides /usr/share/emacs/24.4/lisp/org/org-entities /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-md hides /usr/share/emacs/24.4/lisp/org/ox-md /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-eshell hides /usr/share/emacs/24.4/lisp/org/org-eshell /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-clock hides /usr/share/emacs/24.4/lisp/org/org-clock /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-w3m hides /usr/share/emacs/24.4/lisp/org/org-w3m /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-src hides /usr/share/emacs/24.4/lisp/org/org-src /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-crypt hides /usr/share/emacs/24.4/lisp/org/org-crypt /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-ditaa hides /usr/share/emacs/24.4/lisp/org/ob-ditaa /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-css hides /usr/share/emacs/24.4/lisp/org/ob-css /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-ocaml hides /usr/share/emacs/24.4/lisp/org/ob-ocaml /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-compat hides /usr/share/emacs/24.4/lisp/org/org-compat /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-exp hides /usr/share/emacs/24.4/lisp/org/ob-exp /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-attach hides /usr/share/emacs/24.4/lisp/org/org-attach /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-agenda hides /usr/share/emacs/24.4/lisp/org/org-agenda /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-timer hides /usr/share/emacs/24.4/lisp/org/org-timer /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-screen hides /usr/share/emacs/24.4/lisp/org/ob-screen /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-table hides /usr/share/emacs/24.4/lisp/org/ob-table /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-octave hides /usr/share/emacs/24.4/lisp/org/ob-octave /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob hides /usr/share/emacs/24.4/lisp/org/ob /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-macro hides /usr/share/emacs/24.4/lisp/org/org-macro /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-footnote hides /usr/share/emacs/24.4/lisp/org/org-footnote /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-capture hides /usr/share/emacs/24.4/lisp/org/org-capture /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-makefile hides /usr/share/emacs/24.4/lisp/org/ob-makefile /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-man hides /usr/share/emacs/24.4/lisp/org/ox-man /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-mscgen hides /usr/share/emacs/24.4/lisp/org/ob-mscgen /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-feed hides /usr/share/emacs/24.4/lisp/org/org-feed /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-plantuml hides /usr/share/emacs/24.4/lisp/org/ob-plantuml /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-inlinetask hides /usr/share/emacs/24.4/lisp/org/org-inlinetask /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-latex hides /usr/share/emacs/24.4/lisp/org/ob-latex /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-scheme hides /usr/share/emacs/24.4/lisp/org/ob-scheme /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-mobile hides /usr/share/emacs/24.4/lisp/org/org-mobile /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-comint hides /usr/share/emacs/24.4/lisp/org/ob-comint /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-sh hides /usr/share/emacs/24.4/lisp/org/ob-sh /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-ledger hides /usr/share/emacs/24.4/lisp/org/ob-ledger /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-plot hides /usr/share/emacs/24.4/lisp/org/org-plot /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-sql hides /usr/share/emacs/24.4/lisp/org/ob-sql /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-beamer hides /usr/share/emacs/24.4/lisp/org/ox-beamer /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-id hides /usr/share/emacs/24.4/lisp/org/org-id /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-sqlite hides /usr/share/emacs/24.4/lisp/org/ob-sqlite /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-element hides /usr/share/emacs/24.4/lisp/org/org-element /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-R hides /usr/share/emacs/24.4/lisp/org/ob-R /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-mouse hides /usr/share/emacs/24.4/lisp/org/org-mouse /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-io hides /usr/share/emacs/24.4/lisp/org/ob-io /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-colview hides /usr/share/emacs/24.4/lisp/org/org-colview /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-indent hides /usr/share/emacs/24.4/lisp/org/org-indent /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-eval hides /usr/share/emacs/24.4/lisp/org/ob-eval /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-emacs-lisp hides /usr/share/emacs/24.4/lisp/org/ob-emacs-lisp /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox hides /usr/share/emacs/24.4/lisp/org/ox /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-macs hides /usr/share/emacs/24.4/lisp/org/org-macs /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-calc hides /usr/share/emacs/24.4/lisp/org/ob-calc /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-core hides /usr/share/emacs/24.4/lisp/org/ob-core /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-docview hides /usr/share/emacs/24.4/lisp/org/org-docview /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-ruby hides /usr/share/emacs/24.4/lisp/org/ob-ruby /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-lilypond hides /usr/share/emacs/24.4/lisp/org/ob-lilypond /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-org hides /usr/share/emacs/24.4/lisp/org/ob-org /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-rmail hides /usr/share/emacs/24.4/lisp/org/org-rmail /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-info hides /usr/share/emacs/24.4/lisp/org/org-info /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-list hides /usr/share/emacs/24.4/lisp/org/org-list /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-ascii hides /usr/share/emacs/24.4/lisp/org/ox-ascii /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-datetree hides /usr/share/emacs/24.4/lisp/org/org-datetree /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-maxima hides /usr/share/emacs/24.4/lisp/org/ob-maxima /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-org hides /usr/share/emacs/24.4/lisp/org/ox-org /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org hides /usr/share/emacs/24.4/lisp/org/org /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-java hides /usr/share/emacs/24.4/lisp/org/ob-java /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-bbdb hides /usr/share/emacs/24.4/lisp/org/org-bbdb /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-tangle hides /usr/share/emacs/24.4/lisp/org/ob-tangle /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-odt hides /usr/share/emacs/24.4/lisp/org/ox-odt /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-awk hides /usr/share/emacs/24.4/lisp/org/ob-awk /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-sass hides /usr/share/emacs/24.4/lisp/org/ob-sass /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-archive hides /usr/share/emacs/24.4/lisp/org/org-archive /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-shen hides /usr/share/emacs/24.4/lisp/org/ob-shen /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-dot hides /usr/share/emacs/24.4/lisp/org/ob-dot /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-gnus hides /usr/share/emacs/24.4/lisp/org/org-gnus /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-texinfo hides /usr/share/emacs/24.4/lisp/org/ox-texinfo /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-pcomplete hides /usr/share/emacs/24.4/lisp/org/org-pcomplete /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-python hides /usr/share/emacs/24.4/lisp/org/ob-python /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-ref hides /usr/share/emacs/24.4/lisp/org/ob-ref /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-publish hides /usr/share/emacs/24.4/lisp/org/ox-publish /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-keys hides /usr/share/emacs/24.4/lisp/org/ob-keys /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-faces hides /usr/share/emacs/24.4/lisp/org/org-faces /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ox-latex hides /usr/share/emacs/24.4/lisp/org/ox-latex /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-habit hides /usr/share/emacs/24.4/lisp/org/org-habit /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-irc hides /usr/share/emacs/24.4/lisp/org/org-irc /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-table hides /usr/share/emacs/24.4/lisp/org/org-table /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/ob-perl hides /usr/share/emacs/24.4/lisp/org/ob-perl /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-version hides /usr/share/emacs/24.4/lisp/org/org-version /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-install hides /usr/share/emacs/24.4/lisp/org/org-install /home/wgg/.emacs.d/elpa/org-plus-contrib-20150629/org-loaddefs hides /usr/share/emacs/24.4/lisp/org/org-loaddefs Features: (shadow bbdb-message emacsbug sendmail debug hippie-exp vc-rcs pdf-sync pdf-annot pdf-outline pdf-links pdf-history pcmpl-unix find-dired dired-aux ispell man w3m-form w3m-filter w3m-cookie w3m-bookmark w3m-tabmenu w3m-session ffap w3m w3m-hist w3m-fb bookmark-w3m w3m-ems w3m-ccl ccl w3m-favicon w3m-image w3m-proc w3m-util nnir qp xterm gnus-cite gnus-html url-cache mm-url url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util url-parse url-vars mm-archive mail-extr gnus-bcklg misearch multi-isearch vc-git sh-script smie executable eieio-opt speedbar sb-image dframe rx re-builder sgml-mode ox-koma-letter ox-texinfo ox-org ox-icalendar ox-html ox-beamer ox-latex ox-ascii ox-publish ox tabify org-table image-file org-element org-rmail org-mhe org-irc org-info org-gnus org-docview doc-view org-bibtex bibtex org-bbdb org-w3m org org-macro org-footnote org-pcomplete org-list org-faces org-entities org-version ob-emacs-lisp ob ob-tangle ob-ref ob-lob ob-table ob-exp org-src ob-keys ob-comint ob-core ob-eval org-compat org-macs org-loaddefs find-func em-unix em-term term ehelp em-smart em-script em-prompt em-ls em-hist em-pred em-glob em-dirs em-cmpl em-basic em-banner em-alias esh-var esh-io esh-cmd esh-opt esh-ext esh-proc esh-arg esh-groups eshell esh-module esh-mode esh-util gnus-async sort gnus-ml disp-table windmove gnus-topic parse-time netrc nnfolder bbdb-gnus nnmaildir network-stream starttls tls elisp-slime-nav pdf-occur ibuf-ext ibuffer tablist tablist-filter semantic/wisent/comp semantic/wisent semantic/wisent/wisent dired-x dired pdf-isearch pdf-misc imenu pdf-tools cus-edit pdf-view jka-compr pdf-cache pdf-info tq pdf-util image-mode mule-util sauron-identica sauron-jabber sauron-twittering sauron-notifications notifications sauron-org appt diary-lib diary-loaddefs cal-menu calendar cal-loaddefs sauron-dbus dbus xml sauron-erc sauron erc-services erc-autoaway erc-dcc erc-sasl gnus-delay gnus-draft gnus-agent gnus-srvr gnus-score score-mode nnvirtual nntp gnus-cache gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime dig mailcap gnus-sum nndraft nnmh nnoo gnus-group gnus-undo gnus-start gnus-spec gnus-win nnmail gnus-int gnus-range mail-source gnus gnus-ems nnheader bbdb-mua bbdb-com crm bbdb bbdb-site timezone bbdb-loaddefs slime-fancy slime-trace-dialog slime-fontifying-fu slime-package-fu slime-references slime-compiler-notes-tree slime-scratch slime-presentations bridge slime-fuzzy slime-fancy-trace slime-fancy-inspector slime-c-p-c slime-editing-commands slime-autodoc eldoc slime-repl elp slime-parse slime gud apropos etags arc-mode archive-mode noutline outline hyperspec browse-url slime-autoloads rainbow-delimiters paren elec-pair winner time saveplace tramp-cache tramp-sh recentf tree-widget savehist semantic/idle semantic/format ezimage semantic/tag-ls semantic/find semantic/ctxt tomorrow-night-bright-theme color-theme-tomorrow xt-mouse semantic/util-modes semantic/util semantic semantic/tag semantic/lex semantic/fw mode-local cedet whitespace magit-wip magit-key-mode magit view tramp tramp-compat tramp-loaddefs trampver shell advice help-mode grep compile diff-mode autorevert filenotify git-rebase-mode git-commit-mode server log-edit easy-mmode message idna cl-macs rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log company edmacro kmacro erc-list erc-menu erc-join erc-ring erc-networks erc-pcomplete pcomplete comint ansi-color ring erc-track erc-match erc-netsplit erc-hl-nicks color cl gv erc-button erc-fill erc-stamp wid-edit cl-loaddefs cl-lib erc-goodies erc erc-backend erc-compat format-spec auth-source eieio byte-opt bytecomp byte-compile cconv eieio-core gnus-util time-date mm-util help-fns mail-prsvr password-cache thingatpt pp cus-start cus-load epa-file epa derived epg tex-site darkroom-autoloads dash-autoloads erc-hl-nicks-autoloads esxml-autoloads db-autoloads gratuitous-dark-theme-autoloads kv-autoloads late-night-theme-autoloads finder-inf info easymenu rainbow-delimiters-autoloads tron-theme-autoloads package epg-config tooltip electric uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment lisp-mode prog-mode register page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote make-network-process dbusbind gfilenotify dynamic-setting font-render-setting x multi-tty emacs) Memory information: ((conses 16 2371792 287587) (symbols 48 172482 17) (miscs 40 3807 12000) (strings 32 527198 47542) (string-bytes 1 28336991) (vectors 16 187907) (vector-slots 8 2963927 182255) (floats 8 3416 26348) (intervals 56 106399 3626) (buffers 960 140) (heap 1024 154824 12981)) From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 26 03:09:49 2015 Received: (at 21020) by debbugs.gnu.org; 26 Jul 2015 07:09:49 +0000 Received: from localhost ([127.0.0.1]:58814 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJG4D-0001QE-3L for submit@debbugs.gnu.org; Sun, 26 Jul 2015 03:09:49 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:54524) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJG4A-0001Q5-Cc for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 03:09:46 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 881FA16099B; Sun, 26 Jul 2015 00:09:45 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id T5nPLs9J2KpC; Sun, 26 Jul 2015 00:09:40 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 88264160CB6; Sun, 26 Jul 2015 00:09:40 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 5epqxBcewKhY; Sun, 26 Jul 2015 00:09:40 -0700 (PDT) Received: from [192.168.1.9] (pool-100-32-155-148.lsanca.fios.verizon.net [100.32.155.148]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 475D416099B; Sun, 26 Jul 2015 00:09:40 -0700 (PDT) Message-ID: <55B487B4.7060709@cs.ucla.edu> Date: Sun, 26 Jul 2015 00:09:40 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: "William G. Gardella" Subject: Re: 24.4; `display-time-world' tampers with TZ Content-Type: multipart/mixed; boundary="------------010405080708080809030701" X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, Eli Zaretskii X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" This is a multi-part message in MIME format. --------------010405080708080809030701 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Thanks for the bug report. Improving Emacs time zones has been on my TODO list for ages, and the report prompted me to do that. Attached is a patch which works for me on GNU/Linux. I'm CC'ing this to Eli to give him a heads-up in case it has implications on MS-Windows. --------------010405080708080809030701 Content-Type: text/plain; charset=UTF-8; name="0001-New-optional-ZONE-arg-for-format-time-string-etc.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-New-optional-ZONE-arg-for-format-time-string-etc.txt" RnJvbSAzZGJjN2E3YzNlMzAyYTMxYmJhNGZhYzI1OWQzZWYyMzcyNzQ5NDU2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBTdW4sIDI2IEp1bCAyMDE1IDAwOjAxOjM0IC0wNzAwClN1YmplY3Q6IFtQQVRD SF0gTmV3IG9wdGlvbmFsIFpPTkUgYXJnIGZvciBmb3JtYXQtdGltZS1zdHJpbmcgZXRjLgoK VGhpcyBzaW1wbGlmaWVzIHRpbWUgY29udmVyc2lvbnMgaW4gb3RoZXIgdGltZSB6b25lcy4K SXQgYWxzbyBwcmV2ZW50cyBkaXNwbGF5LXRpbWUtd29ybGQgdGFtcGVyaW5nIHdpdGggVFog KEJ1ZyMyMTAyMCkuCiogYWRtaW4vYWRtaW4uZWwgKGFkZC1yZWxlYXNlLWxvZ3MpOgpVc2Ug aW1wcm92ZWQgYWRkLWxvZy10aW1lLWZvcm1hdCBBUEkuCiogYWRtaW4vbWVyZ2UtZ251bGli IChHTlVMSUJfTU9EVUxFUyk6IEFkZCB0aW1lX3J6LCB0aW1lZ20uCihHTlVMSUJfVE9PTF9G TEFHUyk6IEF2b2lkIGZsZXhtZW1iZXIsIHNldGVudiwgdW5zZXRlbnYuCiogY29uZmlndXJl LmFjICh0emFsbG9jKTogUmVtb3ZlIHRlc3QgZm9yIHRoaXMsIHNpbmNlCkVtYWNzIG5vIGxv bmdlciB1c2VzIEhBVkVfVFpBTExPQyBkaXJlY3RseS4KKiBkb2MvbGlzcHJlZi9vcy50ZXhp IChUaW1lIG9mIERheSwgVGltZSBDb252ZXJzaW9uKQooVGltZSBQYXJzaW5nKToKKiBldGMv TkVXUzogRG9jdW1lbnQgdGhlIG5ldyBiZWhhdmlvci4KTWVyZ2UgZnJvbSBnbnVsaWIsIGlu Y29ycG9yYXRpbmc6CjIwMTUtMDctMjUgc3RyZnRpbWU6IGZpeCBuZXdseS1pbnRyb2R1Y2Vk IGJ1ZyBvbiBTb2xhcmlzCjIwMTUtMDctMjMgZnByaW50ZnRpbWUsIHN0cmZ0aW1lOiB1c2Ug dGltZXpvbmVfdCBhcmdzCiogbGliL2dudWxpYi5taywgbTQvZ251bGliLWNvbXAubTQ6IFJl Z2VuZXJhdGUuCiogbGliL3N0cmZ0aW1lLmMsIGxpYi9zdHJmdGltZS5oLCBsaWIvdGltZS5p bi5oLCBtNC9zeXNfdGltZV9oLm00OgoqIG00L3RpbWVfaC5tNDoKVXBkYXRlIGZyb20gZ251 bGliLgoqIGxpYi90aW1lX3J6LmMsIGxpYi90aW1lZ20uYywgbTQvdGltZV9yei5tNCwgbTQv dGltZWdtLm00OgoqIHNyYy90aW1lX3J6LmM6IE5ldyBmaWxlcyBmcm9tIGdudWxpYi4KKiBs aXNwL3RpbWUtc3RhbXAuZWwgKHRpbWUtc3RhbXAtc3RyaW5nKToKKiBsaXNwL3RpbWUuZWwg KGRpc3BsYXktdGltZS13b3JsZC1saXN0KQooZGlzcGxheS10aW1lLXdvcmxkLWRpc3BsYXkp OgpVc2UgbmV3IEFQSSwgd2l0aCB0aW1lIHpvbmUgYXJnLgoqIGxpc3AvdGltZS5lbCAoZGlz cGxheS10aW1lLXdvcmxkLWRpc3BsYXkpOgpGaXggcmFjZSB3aGVuIGN1cnJlbnQtdGltZSBh ZHZhbmNlcyB3aGlsZSB3ZSdyZSBydW5uaW5nLgoqIGxpc3AvdmMvYWRkLWxvZy5lbCAoYWRk LWxvZy1pc284NjAxLXRpbWUtem9uZSkKKGFkZC1sb2ctaXNvODYwMS10aW1lLXN0cmluZyk6 IEFjY2VwdCBvcHRpb25hbCB0aW1lIHpvbmUgYXJnLgoqIGxpc3AvdmMvYWRkLWxvZy5lbCAo YWRkLWNoYW5nZS1sb2ctZW50cnkpOgoqIGxpc3AvdmMvbG9nLWVkaXQuZWwgKGxvZy1lZGl0 LWNoYW5nZWxvZy1vdXJzLXApOiBVc2UgbmV3IGFyZy4KKiBzcmMvY29uZl9wb3N0LmggKGdl dGVudl9UWiwgc2V0ZW52X1RaKTogTmV3IG1hY3Jvcy4KKGVtYWNzX2dldGVudl9UWiwgZW1h Y3Nfc2V0ZW52X1RaKTogTmV3IGRlY2xzLgoqIHNyYy9lZGl0Zm5zLmM6IEluY2x1ZGUgZXJy bm8uaC4KKHNldF90aW1lX3pvbmVfcnVsZSk6IE9taXQgdW5uZWNlc3NhcnkgZm9yd2FyZCBk ZWNsLgooaW5pdGlhbF90eik6IFJlbW92ZSwgcmVwbGFjaW5nIHdpdGggLi4uCihsb2NhbF90 eiwgd2FsbF9jbG9ja190eiwgdXRjX3R6KTogTmV3IHN0YXRpYyB2YXJzIGFuZCBjb25zdGFu dHMuCih0emVxbGVuKTogTmV3IGNvbnN0YW50OyBwcmVmZXIgaXQgdG8gKHNpemVvZiAiVFo9 IiAtIDEpLgooZW1hY3NfbG9jYWx0aW1lX3J6LCBlbWFjc19ta3RpbWVfeiwgeHR6YWxsb2Ms IHh0emZyZWUpCih0emxvb2t1cCk6IE5ldyBzdGF0aWMgZnVuY3Rpb25zLgooaW5pdF9lZGl0 Zm5zKTogTmV3IGFyZyBEVU1QSU5HLiAgQWxsIHVzZXMgY2hhbmdlZC4KKGluaXRfZWRpdGZu cyk6IE9taXQgbW9zdCBpbml0aWFsaXphdGlvbiBpZiBkdW1waW5nLCBub3QgaWYKIWluaXRp YWxpemVkLiAgSW5pdGlhbGl6ZSB3YWxsX2Nsb2NrX3R6IGFuZCBsb2NhbF90ei4KKGVtYWNz X25tZW1mdGltZSwgZm9ybWF0X3RpbWVfc3RyaW5nKTogVGltZSB6b25lIGFyZ3VtZW50IGNh biBub3cKYmUgYW55IHRpbWUgem9uZSwgbm90IGp1c3QgYSBib29sZWFuIGZvciBVVEMgb3Ig bG9jYWwgdGltZS4gIEFsbApjYWxsZXJzIGNoYW5nZWQuCihGZm9ybWF0X3RpbWVfc3RyaW5n LCBGZW5jb2RlX3RpbWUsIEZjdXJyZW50X3RpbWVfc3RyaW5nKQooRmN1cnJlbnRfdGltZV96 b25lKTogTmV3IG9wdGlvbmFsIGFyZyBaT05FLgooRmRlY29kZV90aW1lLCBGc2V0X3RpbWVf em9uZV9ydWxlKTogWk9ORSBhcmcgY2FuIG5vdyBhbHNvIHRha2UKdGhlIHNhbWUgZm9ybSBh cyB3aXRoIHRoZSBvdGhlciBuZXcgYWRkaXRpb25zLgooZGVjb2RlX3RpbWVfem9uZSk6IFJl bW92ZTsgbm8gbG9uZ2VyIG5lZWRlZC4KKHR6dmFsYnVmKTogTm93IGZpbGUtc2NvcGUuCihl bWFjc19nZXRlbnZfVFosIGVtYWNzX3NldGVudl9UWik6IE5ldyBmdW5jdGlvbnMuCihzeW1z X29mX2VkaXRmbnMpOiBEZWZpbmUgUXdhbGwuCiogc3JjL2VkaXRmbnMuYyAobWt0aW1lX3op IFshSEFWRV9UWkFMTE9DXToKKiBzcmMvc3lzdGltZS5oIChta3RpbWVfeiwgdGltZXpvbmVf dCwgdHphbGxvYywgdHpmcmVlKQpbIUhBVkVfVFpBTExPQ106ClJlbW92ZTsgbm93IHN1cHBs aWVkIGJ5IGdudWxpYi4KKiBzcmMvZW1hY3MuYyAobWFpbik6Ciogc3JjL2xpc3AuaCAoaW5p dF9lZGl0Zm5zKTogQWRqdXN0IHRvIGluaXRfZWRpdGZucyBBUEkgY2hhbmdlLgotLS0KIGFk bWluL2FkbWluLmVsICAgICAgfCAgIDYgKy0KIGFkbWluL21lcmdlLWdudWxpYiAgfCAgIDgg Ky0KIGNvbmZpZ3VyZS5hYyAgICAgICAgfCAgIDIgKy0KIGRvYy9saXNwcmVmL29zLnRleGkg fCAgODAgKysrKysrLS0tLS0KIGV0Yy9ORVdTICAgICAgICAgICAgfCAgIDkgKysKIGxpYi9n bnVsaWIubWsgICAgICAgfCAgNDIgKysrKy0tCiBsaWIvc3RyZnRpbWUuYyAgICAgIHwgIDY0 ICsrKy0tLS0tLQogbGliL3N0cmZ0aW1lLmggICAgICB8ICAgNyArLQogbGliL3RpbWUuaW4u aCAgICAgICB8ICAxOSArKysKIGxpYi90aW1lX3J6LmMgICAgICAgfCAzNzQgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL3RpbWVn bS5jICAgICAgICB8ICAzOCArKysrKysKIGxpc3AvdGltZS1zdGFtcC5lbCAgfCAgMTIgKy0K IGxpc3AvdGltZS5lbCAgICAgICAgfCAgMzMgKystLS0KIGxpc3AvdmMvYWRkLWxvZy5lbCAg fCAgMjMgKystLQogbGlzcC92Yy9sb2ctZWRpdC5lbCB8ICAgMyArLQogbTQvZ251bGliLWNv bXAubTQgICB8ICA0MyArKysrLS0KIG00L3N5c190aW1lX2gubTQgICAgfCAgIDEgKwogbTQv dGltZV9oLm00ICAgICAgICB8ICAgMSArCiBtNC90aW1lX3J6Lm00ICAgICAgIHwgIDIxICsr KwogbTQvdGltZWdtLm00ICAgICAgICB8ICAyNiArKysrCiBzcmMvY29uZl9wb3N0LmggICAg IHwgICA3ICsKIHNyYy9lZGl0Zm5zLmMgICAgICAgfCAzMjQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvZW1hY3MuYyAgICAgICAgIHwgICAy ICstCiBzcmMvbGlzcC5oICAgICAgICAgIHwgICAyICstCiBzcmMvc3lzdGltZS5oICAgICAg IHwgIDE0IC0tCiBzcmMvdGltZV9yei5jICAgICAgIHwgICAwCiAyNiBmaWxlcyBjaGFuZ2Vk LCA4NjMgaW5zZXJ0aW9ucygrKSwgMjk4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYi90aW1lX3J6LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdGltZWdtLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBtNC90aW1lX3J6Lm00CiBjcmVhdGUgbW9kZSAxMDA2NDQgbTQv dGltZWdtLm00CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3RpbWVfcnouYwoKZGlmZiAtLWdp dCBhL2FkbWluL2FkbWluLmVsIGIvYWRtaW4vYWRtaW4uZWwKaW5kZXggOTNlOTEyNC4uMjY3 ZjJjNCAxMDA2NDQKLS0tIGEvYWRtaW4vYWRtaW4uZWwKKysrIGIvYWRtaW4vYWRtaW4uZWwK QEAgLTM4LDE0ICszOCwxMiBAQCBPcHRpb25hbCBhcmd1bWVudCBEQVRFIGlzIHRoZSByZWxl YXNlIGRhdGUsIGRlZmF1bHQgdG9kYXkuIgogCQkJCQkgIGVtYWNzLW1pbm9yLXZlcnNpb24p KQogCQkgICAgIChyZWFkLXN0cmluZyAiUmVsZWFzZSBkYXRlOiAiCiAJCQkJICAocHJvZ24g KHJlcXVpcmUgJ2FkZC1sb2cpCi0JCQkJCSAobGV0ICgoYWRkLWxvZy10aW1lLXpvbmUtcnVs ZSB0KSkKLQkJCQkJICAgKGZ1bmNhbGwgYWRkLWxvZy10aW1lLWZvcm1hdCkpKSkpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBhZGQtbG9n LXRpbWUtZm9ybWF0IG5pbCB0KSkpKSkKICAgKHNldHEgcm9vdCAoZXhwYW5kLWZpbGUtbmFt ZSByb290KSkKICAgKHVubGVzcyAoZmlsZS1leGlzdHMtcCAoZXhwYW5kLWZpbGUtbmFtZSAi c3JjL2VtYWNzLmMiIHJvb3QpKQogICAgICh1c2VyLWVycm9yICIlcyBkb2Vzbid0IHNlZW0g dG8gYmUgdGhlIHJvb3Qgb2YgYW4gRW1hY3Mgc291cmNlIHRyZWUiIHJvb3QpKQogICAocmVx dWlyZSAnYWRkLWxvZykKLSAgKG9yIGRhdGUgKHNldHEgZGF0ZSAobGV0ICgoYWRkLWxvZy10 aW1lLXpvbmUtcnVsZSB0KSkKLQkJCShmdW5jYWxsIGFkZC1sb2ctdGltZS1mb3JtYXQpKSkp CisgIChvciBkYXRlIChzZXRxIGRhdGUgKGZ1bmNhbGwgYWRkLWxvZy10aW1lLWZvcm1hdCBu aWwgdCkpKQogICAobGV0KiAoKGxvZ3MgKHByb2Nlc3MtbGluZXMgImZpbmQiIHJvb3QgIi1u YW1lIiAiQ2hhbmdlTG9nIikpCiAJIChlbnRyeSAoZm9ybWF0ICIlcyAgJXMgIDwlcz5cblxu XHQqIFZlcnNpb24gJXMgcmVsZWFzZWQuXG5cbiIKIAkJCWRhdGUKZGlmZiAtLWdpdCBhL2Fk bWluL21lcmdlLWdudWxpYiBiL2FkbWluL21lcmdlLWdudWxpYgppbmRleCBlNzkxMGE2Li45 NjNjM2EwIDEwMDc1NQotLS0gYS9hZG1pbi9tZXJnZS1nbnVsaWIKKysrIGIvYWRtaW4vbWVy Z2UtZ251bGliCkBAIC0zNywyMCArMzcsMjAgQEAgR05VTElCX01PRFVMRVM9JwogICBwaXBl MiBwc2VsZWN0IHB0aHJlYWRfc2lnbWFzayBwdXRlbnYgcWNvcHktYWNsIHJlYWRsaW5rIHJl YWRsaW5rYXQKICAgc2lnMnN0ciBzb2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBzdGRkZWYg c3RkaW8KICAgc3RwY3B5IHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBz eXNfc3RhdAotICBzeXNfdGltZSB0aW1lIHRpbWVfciB0aW1lci10aW1lIHRpbWVzcGVjLWFk ZCB0aW1lc3BlYy1zdWIKKyAgc3lzX3RpbWUgdGltZSB0aW1lX3IgdGltZV9yeiB0aW1lZ20g dGltZXItdGltZSB0aW1lc3BlYy1hZGQgdGltZXNwZWMtc3ViCiAgIHVuc2V0ZW52IHVwZGF0 ZS1jb3B5cmlnaHQgdXRpbWVucwogICB2bGEgd2FybmluZ3MKICcKIAogR05VTElCX1RPT0xf RkxBR1M9JwogICAtLWF2b2lkPWNsb3NlIC0tYXZvaWQ9ZHVwCi0gIC0tYXZvaWQ9ZmNoZGly IC0tYXZvaWQ9ZnN0YXQKKyAgLS1hdm9pZD1mY2hkaXIgLS1hdm9pZD1mbGV4bWVtYmVyIC0t YXZvaWQ9ZnN0YXQKICAgLS1hdm9pZD1tYWxsb2MtcG9zaXggLS1hdm9pZD1tc3ZjLWludmFs IC0tYXZvaWQ9bXN2Yy1ub3Rocm93CiAgIC0tYXZvaWQ9b3BlbiAtLWF2b2lkPW9wZW5hdC1k aWUgLS1hdm9pZD1vcGVuZGlyCiAgIC0tYXZvaWQ9cmFpc2UKLSAgLS1hdm9pZD1zYXZlLWN3 ZCAtLWF2b2lkPXNlbGVjdCAtLWF2b2lkPXNpZ3Byb2NtYXNrCisgIC0tYXZvaWQ9c2F2ZS1j d2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1zZXRlbnYgLS1hdm9pZD1zaWdwcm9jbWFzawog ICAtLWF2b2lkPXN0ZGFyZyAtLWF2b2lkPXN0ZGJvb2wKLSAgLS1hdm9pZD10aHJlYWRsaWIK KyAgLS1hdm9pZD10aHJlYWRsaWIgLS1hdm9pZD11bnNldGVudgogICAtLWNvbmRpdGlvbmFs LWRlcGVuZGVuY2llcyAtLWltcG9ydCAtLW5vLWNoYW5nZWxvZyAtLW5vLXZjLWZpbGVzCiAg IC0tbWFrZWZpbGUtbmFtZT1nbnVsaWIubWsKICcKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5h YyBiL2NvbmZpZ3VyZS5hYwppbmRleCBiNThjN2RlLi4xOWI4YjlkIDEwMDY0NAotLS0gYS9j b25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC00MDAwLDcgKzQwMDAsNyBAQCBB Q19TVUJTVChLUkI0TElCKQogCiBBQ19DSEVDS19IRUFERVJTKHZhbGdyaW5kL3ZhbGdyaW5k LmgpCiAKLUFDX0NIRUNLX0ZVTkNTX09OQ0UodHphbGxvYyB0enNldCkKK0FDX0NIRUNLX0ZV TkNTX09OQ0UodHpzZXQpCiAKIG9rX3NvX2Zhcj15ZXMKIEFDX0NIRUNLX0ZVTkMoc29ja2V0 LCAsIG9rX3NvX2Zhcj1ubykKZGlmZiAtLWdpdCBhL2RvYy9saXNwcmVmL29zLnRleGkgYi9k b2MvbGlzcHJlZi9vcy50ZXhpCmluZGV4IDBjMzliZTkuLjRiNWExYjQgMTAwNjQ0Ci0tLSBh L2RvYy9saXNwcmVmL29zLnRleGkKKysrIGIvZG9jL2xpc3ByZWYvb3MudGV4aQpAQCAtMTIz NCw3ICsxMjM0LDcgQEAgdGhyZWUtZWxlbWVudCBsaXN0cywgd2l0aCBvbWl0dGVkIEB2YXJ7 bWljcm9zZWN9IGFuZCBAdmFye3BpY29zZWN9CiBjb21wb25lbnRzIGRlZmF1bHRpbmcgdG8g emVyby4KIAogQGNpbmRleCB0aW1lIHZhbHVlCi0gIEZ1bmN0aW9uIGFyZ3VtZW50cywgZS5n LiwgdGhlIEB2YXJ7dGltZS12YWx1ZX0gYXJndW1lbnQgdG8KKyAgRnVuY3Rpb24gYXJndW1l bnRzLCBlLmcuLCB0aGUgQHZhcnt0aW1lfSBhcmd1bWVudCB0bwogQGNvZGV7Y3VycmVudC10 aW1lLXN0cmluZ30sIGFjY2VwdCBhIG1vcmUtZ2VuZXJhbCBAZGZue3RpbWUgdmFsdWV9CiBm b3JtYXQsIHdoaWNoIGNhbiBiZSBhIGxpc3Qgb2YgaW50ZWdlcnMgYXMgYWJvdmUsIG9yIGEg c2luZ2xlIG51bWJlcgogZm9yIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoLCBvciBAY29kZXtu aWx9IGZvciB0aGUgY3VycmVudCB0aW1lLiAgWW91CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCBv ZiBpbnRlZ2VycyB1c2luZyBAY29kZXtzZWNvbmRzLXRvLXRpbWV9LCBhbmQgaW50byBvdGhl ciBmb3JtcyB1c2luZwogQGNvZGV7ZGVjb2RlLXRpbWV9IGFuZCBAY29kZXtmbG9hdC10aW1l fS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUKIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHNl Y3Rpb25zLgogCi1AZGVmdW4gY3VycmVudC10aW1lLXN0cmluZyAmb3B0aW9uYWwgdGltZS12 YWx1ZQorQGRlZnVuIGN1cnJlbnQtdGltZS1zdHJpbmcgJm9wdGlvbmFsIHRpbWUgem9uZQog VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IHRpbWUgYW5kIGRhdGUgYXMgYSBo dW1hbi1yZWFkYWJsZQogc3RyaW5nLiAgVGhlIGZvcm1hdCBkb2VzIG5vdCB2YXJ5IGZvciB0 aGUgaW5pdGlhbCBwYXJ0IG9mIHRoZSBzdHJpbmcsCiB3aGljaCBjb250YWlucyB0aGUgZGF5 IG9mIHdlZWssIG1vbnRoLCBkYXkgb2YgbW9udGgsIGFuZCB0aW1lIG9mIGRheQpAQCAtMTI1 NSw4ICsxMjU1LDkgQEAgY2hhcmFjdGVycyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0 cmluZyByYXRoZXIgdGhhbiBmcm9tIHRoZSBlbmQsCiBhcyB0aGUgeWVhciBtaWdodCBub3Qg aGF2ZSBleGFjdGx5IGZvdXIgZGlnaXRzLCBhbmQgYWRkaXRpb25hbAogaW5mb3JtYXRpb24g bWF5IHNvbWUgZGF5IGJlIGFkZGVkIGF0IHRoZSBlbmQuCiAKLVRoZSBhcmd1bWVudCBAdmFy e3RpbWUtdmFsdWV9LCBpZiBnaXZlbiwgc3BlY2lmaWVzIGEgdGltZSB0byBmb3JtYXQsCi1p bnN0ZWFkIG9mIHRoZSBjdXJyZW50IHRpbWUuCitUaGUgYXJndW1lbnQgQHZhcnt0aW1lfSwg aWYgZ2l2ZW4sIHNwZWNpZmllcyBhIHRpbWUgdG8gZm9ybWF0LAoraW5zdGVhZCBvZiB0aGUg Y3VycmVudCB0aW1lLiAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50IEB2YXJ7em9uZX0KK2RlZmF1 bHRzIHRvIHRoZSBjdXJyZW50IHRpbWUgem9uZSBydWxlLgogCiBAZXhhbXBsZQogQGdyb3Vw CkBAIC0xMjc1LDkgKzEyNzYsOSBAQCBtdWx0aXBsZSBvZiAxMDAwLCBidXQgdGhpcyBtYXkg Y2hhbmdlIGFzIGhpZ2hlci1yZXNvbHV0aW9uIGNsb2NrcwogYmVjb21lIGF2YWlsYWJsZS4K IEBlbmQgZGVmdW4KIAotQGRlZnVuIGZsb2F0LXRpbWUgJm9wdGlvbmFsIHRpbWUtdmFsdWUK K0BkZWZ1biBmbG9hdC10aW1lICZvcHRpb25hbCB0aW1lCiBUaGlzIGZ1bmN0aW9uIHJldHVy bnMgdGhlIGN1cnJlbnQgdGltZSBhcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBvZgotc2Vj b25kcyBzaW5jZSB0aGUgZXBvY2guICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgQHZhcnt0aW1l LXZhbHVlfSwgaWYKK3NlY29uZHMgc2luY2UgdGhlIGVwb2NoLiAgVGhlIG9wdGlvbmFsIGFy Z3VtZW50IEB2YXJ7dGltZX0sIGlmCiBnaXZlbiwgc3BlY2lmaWVzIGEgdGltZSB0byBjb252 ZXJ0IGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgdGltZS4KIAogQGVtcGh7V2FybmluZ306IFNp bmNlIHRoZSByZXN1bHQgaXMgZmxvYXRpbmcgcG9pbnQsIGl0IG1heSBub3QgYmUKQEAgLTEy ODYsMTQgKzEyODcsMTQgQEAgZXhhY3QuICBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYg cHJlY2lzZSB0aW1lIHN0YW1wcyBhcmUgcmVxdWlyZWQuCiBAY29kZXt0aW1lLXRvLXNlY29u ZHN9IGlzIGFuIGFsaWFzIGZvciB0aGlzIGZ1bmN0aW9uLgogQGVuZCBkZWZ1bgogCi1AZGVm dW4gc2Vjb25kcy10by10aW1lIHRpbWUtdmFsdWUKK0BkZWZ1biBzZWNvbmRzLXRvLXRpbWUg dGltZQogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBhIHRpbWUgdmFsdWUgdG8gbGlzdC1vZi1p bnRlZ2VyIGZvcm0uCi1Gb3IgZXhhbXBsZSwgaWYgQHZhcnt0aW1lLXZhbHVlfSBpcyBhIG51 bWJlciwgQGNvZGV7KHRpbWUtdG8tc2Vjb25kcwotKHNlY29uZHMtdG8tdGltZSBAdmFye3Rp bWUtdmFsdWV9KSl9IGVxdWFscyB0aGUgbnVtYmVyIHVubGVzcyBvdmVyZmxvdworRm9yIGV4 YW1wbGUsIGlmIEB2YXJ7dGltZX0gaXMgYSBudW1iZXIsIEBjb2Rleyh0aW1lLXRvLXNlY29u ZHMKKyhzZWNvbmRzLXRvLXRpbWUgQHZhcnt0aW1lfSkpfSBlcXVhbHMgdGhlIG51bWJlciB1 bmxlc3Mgb3ZlcmZsb3cKIG9yIHJvdW5kaW5nIGVycm9ycyBvY2N1ci4KIEBlbmQgZGVmdW4K IAotQGRlZnVuIGN1cnJlbnQtdGltZS16b25lICZvcHRpb25hbCB0aW1lLXZhbHVlCitAZGVm dW4gY3VycmVudC10aW1lLXpvbmUgJm9wdGlvbmFsIHRpbWUgem9uZQogQGNpbmRleCB0aW1l IHpvbmUsIGN1cnJlbnQKIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3QgZGVzY3JpYmlu ZyB0aGUgdGltZSB6b25lIHRoYXQgdGhlIHVzZXIgaXMKIGluLgpAQCAtMTMwOSwxNSArMTMx MCwyNyBAQCBhZGp1c3RtZW50LCB0aGVuIHRoZSB2YWx1ZSBpcyBjb25zdGFudCB0aHJvdWdo IHRpbWUuCiBJZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkb2Vzbid0IHN1cHBseSBhbGwgdGhl IGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0bwogY29tcHV0ZSB0aGUgdmFsdWUsIHRoZSB1bmtu b3duIGVsZW1lbnRzIG9mIHRoZSBsaXN0IGFyZSBAY29kZXtuaWx9LgogCi1UaGUgYXJndW1l bnQgQHZhcnt0aW1lLXZhbHVlfSwgaWYgZ2l2ZW4sIHNwZWNpZmllcyBhIHRpbWUgdmFsdWUg dG8KLWFuYWx5emUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB0aW1lLgorVGhlIGFyZ3VtZW50 IEB2YXJ7dGltZX0sIGlmIGdpdmVuLCBzcGVjaWZpZXMgYSB0aW1lIHZhbHVlIHRvCithbmFs eXplIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgdGltZS4gIFRoZSBvcHRpb25hbCBhcmd1bWVu dCBAdmFye3pvbmV9CitkZWZhdWx0cyB0byB0aGUgY3VycmVudCB0aW1lIHpvbmUgcnVsZS4K IEBlbmQgZGVmdW4KIAotVGhlIGN1cnJlbnQgdGltZSB6b25lIGlzIGRldGVybWluZWQgYnkg dGhlIEBlbnZ7VFp9IGVudmlyb25tZW50CitAdmluZGV4IFRaLCBlbnZpcm9ubWVudCB2YXJp YWJsZQorVGhlIGRlZmF1bHQgdGltZSB6b25lIGlzIGRldGVybWluZWQgYnkgdGhlIEBlbnZ7 VFp9IGVudmlyb25tZW50CiB2YXJpYWJsZS4gIEB4cmVme1N5c3RlbSBFbnZpcm9ubWVudH0u ICBGb3IgZXhhbXBsZSwgeW91IGNhbiB0ZWxsIEVtYWNzCi10byB1c2UgdW5pdmVyc2FsIHRp bWUgd2l0aCBAY29kZXsoc2V0ZW52ICJUWiIgIlVUQzAiKX0uICBJZiBAZW52e1RafQotaXMg bm90IGluIHRoZSBlbnZpcm9ubWVudCwgRW1hY3MgdXNlcyBhIHBsYXRmb3JtLWRlcGVuZGVu dCBkZWZhdWx0Ci10aW1lIHpvbmUuCit0byBkZWZhdWx0IHRvIHVuaXZlcnNhbCB0aW1lIHdp dGggQGNvZGV7KHNldGVudiAiVFoiICJVVEMwIil9LiAgSWYKK0BlbnZ7VFp9IGlzIG5vdCBp biB0aGUgZW52aXJvbm1lbnQsIEVtYWNzIHVzZXMgc3lzdGVtIHdhbGwgY2xvY2sgdGltZSwK K3doaWNoIGlzIGEgcGxhdGZvcm0tZGVwZW5kZW50IGRlZmF1bHQgdGltZSB6b25lLgorCitA Y2luZGV4IHRpbWUgem9uZSBydWxlCitGdW5jdGlvbnMgdGhhdCBjb252ZXJ0IHRvIGFuZCBm cm9tIGxvY2FsIHRpbWUgYWNjZXB0IGFuIG9wdGlvbmFsCitAZGZue3RpbWUgem9uZSBydWxl fSBhcmd1bWVudCwgd2hpY2ggc3BlY2lmaWVzIHRoZSBjb252ZXJzaW9uJ3MgdGltZQorem9u ZSBhbmQgZGF5bGlnaHQgc2F2aW5nIHRpbWUgaGlzdG9yeS4gIElmIHRoZSB0aW1lIHpvbmUg cnVsZSBpcworb21pdHRlZCBvciBAY29kZXtuaWx9LCB0aGUgY29udmVyc2lvbiB1c2VzIEVt YWNzJ3MgZGVmYXVsdCB0aW1lIHpvbmUuCitJZiBpdCBpcyBAY29kZXt0fSwgdGhlIGNvbnZl cnNpb24gdXNlcyBVbml2ZXJzYWwgVGltZS4gIElmIGl0IGlzCitAY29kZXt3YWxsfSwgdGhl IGNvbnZlcnNpb24gdXNlcyB0aGUgc3lzdGVtIHdhbGwgY2xvY2sgdGltZS4gIElmIGl0IGlz CithIHN0cmluZywgdGhlIGNvbnZlcnNpb24gdXNlcyB0aGUgdGltZSB6b25lIHJ1bGUgZXF1 aXZhbGVudCB0byBzZXR0aW5nCitAZW52e1RafSB0byB0aGF0IHN0cmluZy4KIAogQG5vZGUg VGltZSBDb252ZXJzaW9uCiBAc2VjdGlvbiBUaW1lIENvbnZlcnNpb24KQEAgLTEzNDAsMTMg KzEzNTMsMTQgQEAgY291bnQgdGhlIG51bWJlciBvZiB5ZWFycyBzaW5jZSB0aGUgeWVhciAx IEIuQy4sIGFuZCBkbyBub3Qgc2tpcCB6ZXJvCiBhcyB0cmFkaXRpb25hbCBHcmVnb3JpYW4g eWVhcnMgZG87IGZvciBleGFtcGxlLCB0aGUgeWVhciBudW1iZXIKIEBtaW51c3t9MzcgcmVw cmVzZW50cyB0aGUgR3JlZ29yaWFuIHllYXIgMzggQi5DQC4KIAotQGRlZnVuIGRlY29kZS10 aW1lICZvcHRpb25hbCB0aW1lLXZhbHVlCitAZGVmdW4gZGVjb2RlLXRpbWUgJm9wdGlvbmFs IHRpbWUgem9uZQogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBhIHRpbWUgdmFsdWUgaW50byBj YWxlbmRyaWNhbCBpbmZvcm1hdGlvbi4gIElmCi15b3UgZG9uJ3Qgc3BlY2lmeSBAdmFye3Rp bWUtdmFsdWV9LCBpdCBkZWNvZGVzIHRoZSBjdXJyZW50IHRpbWUuICBUaGUgcmV0dXJuCit5 b3UgZG9uJ3Qgc3BlY2lmeSBAdmFye3RpbWV9LCBpdCBkZWNvZGVzIHRoZSBjdXJyZW50IHRp bWUsIGFuZCBzaW1pbGFybHkKK0B2YXJ7em9uZX0gZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQg dGltZSB6b25lIHJ1bGUuICBUaGUgcmV0dXJuCiB2YWx1ZSBpcyBhIGxpc3Qgb2YgbmluZSBl bGVtZW50cywgYXMgZm9sbG93czoKIAogQGV4YW1wbGUKLShAdmFye3NlY29uZHN9IEB2YXJ7 bWludXRlc30gQHZhcntob3VyfSBAdmFye2RheX0gQHZhcnttb250aH0gQHZhcnt5ZWFyfSBA dmFye2Rvd30gQHZhcntkc3R9IEB2YXJ7em9uZX0pCisoQHZhcntzZWNvbmRzfSBAdmFye21p bnV0ZXN9IEB2YXJ7aG91cn0gQHZhcntkYXl9IEB2YXJ7bW9udGh9IEB2YXJ7eWVhcn0gQHZh cntkb3d9IEB2YXJ7ZHN0fSBAdmFye3V0Y29mZn0pCiBAZW5kIGV4YW1wbGUKIAogSGVyZSBp cyB3aGF0IHRoZSBlbGVtZW50cyBtZWFuOgpAQCAtMTM3MCwxMyArMTM4NCwxMyBAQCBUaGUg ZGF5IG9mIHdlZWssIGFzIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA2LCB3aGVyZSAwIHN0 YW5kcyBmb3IKIFN1bmRheS4KIEBpdGVtIGRzdAogQGNvZGV7dH0gaWYgZGF5bGlnaHQgc2F2 aW5nIHRpbWUgaXMgZWZmZWN0LCBvdGhlcndpc2UgQGNvZGV7bmlsfS4KLUBpdGVtIHpvbmUK LUFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgdGltZSB6b25lLCBhcyB0aGUgbnVtYmVyIG9m IHNlY29uZHMgZWFzdCBvZgotR3JlZW53aWNoLgorQGl0ZW0gdXRjb2ZmCitBbiBpbnRlZ2Vy IGluZGljYXRpbmcgdGhlIFVUQyBvZmZzZXQgaW4gc2Vjb25kcywgaS5lLiwgdGhlIG51bWJl ciBvZgorc2Vjb25kcyBlYXN0IG9mIEdyZWVud2ljaC4KIEBlbmQgdGFibGUKIAogQHN0cm9u Z3tDb21tb24gTGlzcCBOb3RlOn0gQ29tbW9uIExpc3AgaGFzIGRpZmZlcmVudCBtZWFuaW5n cyBmb3IKLUB2YXJ7ZG93fSBhbmQgQHZhcnt6b25lfS4KK0B2YXJ7ZG93fSBhbmQgQHZhcnt1 dGNvZmZ9LgogQGVuZCBkZWZ1bgogCiBAZGVmdW4gZW5jb2RlLXRpbWUgc2Vjb25kcyBtaW51 dGVzIGhvdXIgZGF5IG1vbnRoIHllYXIgJm9wdGlvbmFsIHpvbmUKQEAgLTEzODksMTIgKzE0 MDMsMTEgQEAgWWVhciBudW1iZXJzIGxlc3MgdGhhbiAxMDAgYXJlIG5vdCB0cmVhdGVkIHNw ZWNpYWxseS4gIElmIHlvdSB3YW50IHRoZW0KIHRvIHN0YW5kIGZvciB5ZWFycyBhYm92ZSAx OTAwLCBvciB5ZWFycyBhYm92ZSAyMDAwLCB5b3UgbXVzdCBhbHRlciB0aGVtCiB5b3Vyc2Vs ZiBiZWZvcmUgeW91IGNhbGwgQGNvZGV7ZW5jb2RlLXRpbWV9LgogCi1UaGUgb3B0aW9uYWwg YXJndW1lbnQgQHZhcnt6b25lfSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCB0aW1lIHpvbmUg YW5kCi1pdHMgZGF5bGlnaHQgc2F2aW5nIHRpbWUgcnVsZXMuICBJZiBzcGVjaWZpZWQsIGl0 IGNhbiBiZSBlaXRoZXIgYSBsaXN0Ci0oYXMgeW91IHdvdWxkIGdldCBmcm9tIEBjb2Rle2N1 cnJlbnQtdGltZS16b25lfSksIGEgc3RyaW5nIGFzIGluIHRoZQotQGVudntUWn0gZW52aXJv bm1lbnQgdmFyaWFibGUsIEBjb2Rle3R9IGZvciBVbml2ZXJzYWwgVGltZSwgb3IgYW4KLWlu dGVnZXIgKGFzIHlvdSB3b3VsZCBnZXQgZnJvbSBAY29kZXtkZWNvZGUtdGltZX0pLiAgVGhl IHNwZWNpZmllZAotem9uZSBpcyB1c2VkIHdpdGhvdXQgYW55IGZ1cnRoZXIgYWx0ZXJhdGlv biBmb3IgZGF5bGlnaHQgc2F2aW5nIHRpbWUuCitUaGUgb3B0aW9uYWwgYXJndW1lbnQgQHZh cnt6b25lfSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCB0aW1lIHpvbmUgcnVsZS4KK0luIGFk ZGl0aW9uIHRvIHRoZSB1c3VhbCB0aW1lIHpvbmUgcnVsZSB2YWx1ZXMsIGl0IGNhbiBhbHNv IGJlIGEgbGlzdAorKGFzIHlvdSB3b3VsZCBnZXQgZnJvbSBAY29kZXtjdXJyZW50LXRpbWUt em9uZX0pIG9yIGFuIGludGVnZXIgKGFzCitmcm9tIEBjb2Rle2RlY29kZS10aW1lfSksIGFw cGxpZWQgd2l0aG91dCBhbnkgZnVydGhlciBhbHRlcmF0aW9uIGZvcgorZGF5bGlnaHQgc2F2 aW5nIHRpbWUuCiAKIElmIHlvdSBwYXNzIG1vcmUgdGhhbiBzZXZlbiBhcmd1bWVudHMgdG8g QGNvZGV7ZW5jb2RlLXRpbWV9LCB0aGUgZmlyc3QKIHNpeCBhcmUgdXNlZCBhcyBAdmFye3Nl Y29uZHN9IHRocm91Z2ggQHZhcnt5ZWFyfSwgdGhlIGxhc3QgYXJndW1lbnQgaXMKQEAgLTE0 MzAsMTEgKzE0NDMsMTIgQEAgVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIHRpbWUtc3RyaW5n IEB2YXJ7c3RyaW5nfSBhbmQgcmV0dXJucyB0aGUKIGNvcnJlc3BvbmRpbmcgdGltZSB2YWx1 ZS4KIEBlbmQgZGVmdW4KIAotQGRlZnVuIGZvcm1hdC10aW1lLXN0cmluZyBmb3JtYXQtc3Ry aW5nICZvcHRpb25hbCB0aW1lLXZhbHVlIHVuaXZlcnNhbAorQGRlZnVuIGZvcm1hdC10aW1l LXN0cmluZyBmb3JtYXQtc3RyaW5nICZvcHRpb25hbCB0aW1lIHpvbmUKIAotVGhpcyBmdW5j dGlvbiBjb252ZXJ0cyBAdmFye3RpbWUtdmFsdWV9IChvciB0aGUgY3VycmVudCB0aW1lLCBp ZgotQHZhcnt0aW1lLXZhbHVlfSBpcyBvbWl0dGVkKSB0byBhIHN0cmluZyBhY2NvcmRpbmcg dG8KLUB2YXJ7Zm9ybWF0LXN0cmluZ30uICBUaGUgYXJndW1lbnQKK1RoaXMgZnVuY3Rpb24g Y29udmVydHMgQHZhcnt0aW1lfSAob3IgdGhlIGN1cnJlbnQgdGltZSwgaWYKK0B2YXJ7dGlt ZX0gaXMgb21pdHRlZCkgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvCitAdmFye2Zvcm1hdC1z dHJpbmd9LiAgVGhlIGNvbnZlcnNpb24gdXNlcyB0aGUgdGltZSB6b25lIHJ1bGUgQHZhcnt6 b25lfQorKG9yIHRoZSBjdXJyZW50IHRpbWUgem9uZSBydWxlLCBpZiBvbWl0dGVkKS4gIFRo ZSBhcmd1bWVudAogQHZhcntmb3JtYXQtc3RyaW5nfSBtYXkgY29udGFpbiBAc2FtcHslfS1z ZXF1ZW5jZXMgd2hpY2ggc2F5IHRvCiBzdWJzdGl0dXRlIHBhcnRzIG9mIHRoZSB0aW1lLiAg SGVyZSBpcyBhIHRhYmxlIG9mIHdoYXQgdGhlCiBAc2FtcHslfS1zZXF1ZW5jZXMgbWVhbjoK ZGlmZiAtLWdpdCBhL2V0Yy9ORVdTIGIvZXRjL05FV1MKaW5kZXggNjY2Y2NjZi4uNWJiN2Ew MCAxMDA2NDQKLS0tIGEvZXRjL05FV1MKKysrIGIvZXRjL05FV1MKQEAgLTEwMTQsNiArMTAx NCwxNSBAQCBrZXkgd29ya3MpIGJ5IHR5cGluZyDigJhBLVvigJkgYW5kIOKAmEEtXeKAmS4K ICsrKwogKiogVGltZS1yZWxhdGVkIGNoYW5nZXM6CiAKKyoqKiBUaW1lIGNvbnZlcnNpb24g ZnVuY3Rpb25zIG5vdyBhY2NlcHQgYW4gb3B0aW9uYWwgWk9ORSBhcmd1bWVudAordGhhdCBz cGVjaWZpZXMgdGhlIHRpbWUgem9uZSBydWxlcyBmb3IgY29udmVyc2lvbi4gIFpPTkUgaXMg b21pdHRlZCBvcgorbmlsIGZvciBFbWFjcyBsb2NhbCB0aW1lLCB0IGZvciBVbml2ZXJzYWwg VGltZSwg4oCYd2FsbOKAmSBmb3Igc3lzdGVtIHdhbGwKK2Nsb2NrIHRpbWUsIG9yIGEgc3Ry aW5nIGFzIGluIOKAmHNldC10aW1lLXpvbmUtcnVsZeKAmSBmb3IgYSB0aW1lIHpvbmUKK3J1 bGUuICBUaGUgYWZmZWN0ZWQgZnVuY3Rpb25zIGFyZSDigJhjdXJyZW50LXRpbWUtc3RyaW5n 4oCZLAor4oCYY3VycmVudC10aW1lLXpvbmXigJksIOKAmGRlY29kZS10aW1l4oCZLCBhbmQg 4oCYZm9ybWF0LXRpbWUtc3RyaW5n4oCZLiAgVGhlCitmdW5jdGlvbiDigJhlbmNvZGUtdGlt ZeKAmSwgd2hpY2ggYWxyZWFkeSBhY2NlcHRlZCBhIHNpbXBsZSB0aW1lIHpvbmUgcnVsZQor YXJndW1lbnQsIGhhcyBiZWVuIGV4dGVuZGVkIHRvIGFjY2VwdCBhbGwgdGhlIG5ldyBmb3Jt cy4KKwogKioqIFRpbWUtcmVsYXRlZCBmdW5jdGlvbnMgbm93IGNvbnNpc3RlbnRseSBhY2Nl cHQgbnVtYmVycwogKHJlcHJlc2VudGluZyBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCkgYW5k IG5pbCAocmVwcmVzZW50aW5nIHRoZQogY3VycmVudCB0aW1lKSBhcyB3ZWxsIGFzIHRoZSB1 c3VhbCBsaXN0LW9mLWludGVnZXIgcmVwcmVzZW50YXRpb24uCmRpZmYgLS1naXQgYS9saWIv Z251bGliLm1rIGIvbGliL2dudWxpYi5tawppbmRleCAyZGQwZWY4Li4xY2ExMmEyIDEwMDY0 NAotLS0gYS9saWIvZ251bGliLm1rCisrKyBiL2xpYi9nbnVsaWIubWsKQEAgLTIxLDcgKzIx LDcgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRo YXQgcHJvZ3JhbS4KICMKICMgR2VuZXJhdGVkIGJ5IGdudWxpYi10b29sLgotIyBSZXByb2R1 Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1saWI9bGliZ251IC0tc291 cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1tNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9 dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLWF2b2lkPWNsb3NlIC0tYXZvaWQ9ZHVwIC0t YXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZnN0YXQgLS1hdm9pZD1tYWxsb2MtcG9zaXggLS1hdm9p ZD1tc3ZjLWludmFsIC0tYXZvaWQ9bXN2Yy1ub3Rocm93IC0tYXZvaWQ9b3BlbiAtLWF2b2lk PW9wZW5hdC1kaWUgLS1hdm9pZD1vcGVuZGlyIC0tYXZvaWQ9cmFpc2UgLS1hdm9pZD1zYXZl LWN3ZCAtLWF2b2lkPXNlbGVjdCAtLWF2b2lkPXNpZ3Byb2NtYXNrIC0tYXZvaWQ9c3RkYXJn IC0tYXZvaWQ9c3RkYm9vbCAtLWF2b2lkPXRocmVhZGxpYiAtLW1ha2VmaWxlLW5hbWU9Z251 bGliLm1rIC0tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3Jv LXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGFsbG9jYS1vcHQgYmluYXJ5LWlvIGJ5dGVzd2Fw IGMtY3R5cGUgYy1zdHJjYXNlIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJlYW0gY291bnQtb25l LWJpdHMgY291bnQtdHJhaWxpbmctemVyb3MgY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBjcnlw dG8vc2hhMjU2IGNyeXB0by9zaGE1MTIgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVudmly b24gZXhlY2luZm8gZmFjY2Vzc2F0IGZjbnRsIGZjbnRsLWggZmRhdGFzeW5jIGZkb3BlbmRp ciBmaWxlbW9kZSBmc3RhdGF0IGZzeW5jIGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1l IGdldHRpbWVvZmRheSBnaXRsb2ctdG8tY2hhbmdlbG9nIGludHByb3BzIGxhcmdlZmlsZSBs c3RhdCBtYW55d2FybmluZ3MgbWVtcmNociBta29zdGVtcCBta3RpbWUgcGlwZTIgcHNlbGVj dCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHFjb3B5LWFjbCByZWFkbGluayByZWFkbGlua2F0 IHNpZzJzdHIgc29ja2xlbiBzdGF0LXRpbWUgc3RkYWxpZ24gc3RkZGVmIHN0ZGlvIHN0cGNw eSBzdHJmdGltZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxpbmsgc3lzX3N0YXQgc3lzX3Rp bWUgdGltZSB0aW1lX3IgdGltZXItdGltZSB0aW1lc3BlYy1hZGQgdGltZXNwZWMtc3ViIHVu c2V0ZW52IHVwZGF0ZS1jb3B5cmlnaHQgdXRpbWVucyB2bGEgd2FybmluZ3MKKyMgUmVwcm9k dWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbGliPWxpYmdudSAtLXNv dXJjZS1iYXNlPWxpYiAtLW00LWJhc2U9bTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNl PXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1hdm9pZD1jbG9zZSAtLWF2b2lkPWR1cCAt LWF2b2lkPWZjaGRpciAtLWF2b2lkPWZsZXhtZW1iZXIgLS1hdm9pZD1mc3RhdCAtLWF2b2lk PW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cg LS1hdm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5kaXIgLS1hdm9p ZD1yYWlzZSAtLWF2b2lkPXNhdmUtY3dkIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2V0ZW52 IC0tYXZvaWQ9c2lncHJvY21hc2sgLS1hdm9pZD1zdGRhcmcgLS1hdm9pZD1zdGRib29sIC0t YXZvaWQ9dGhyZWFkbGliIC0tYXZvaWQ9dW5zZXRlbnYgLS1tYWtlZmlsZS1uYW1lPWdudWxp Yi5tayAtLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1w cmVmaXg9Z2wgLS1uby12Yy1maWxlcyBhbGxvY2Etb3B0IGJpbmFyeS1pbyBieXRlc3dhcCBj LWN0eXBlIGMtc3RyY2FzZSBjYXJlYWRsaW5rYXQgY2xvc2Utc3RyZWFtIGNvdW50LW9uZS1i aXRzIGNvdW50LXRyYWlsaW5nLXplcm9zIGNyeXB0by9tZDUgY3J5cHRvL3NoYTEgY3J5cHRv L3NoYTI1NiBjcnlwdG8vc2hhNTEyIGR0b2FzdHIgZHRvdGltZXNwZWMgZHVwMiBlbnZpcm9u IGV4ZWNpbmZvIGZhY2Nlc3NhdCBmY250bCBmY250bC1oIGZkYXRhc3luYyBmZG9wZW5kaXIg ZmlsZW1vZGUgZnN0YXRhdCBmc3luYyBnZXRsb2FkYXZnIGdldG9wdC1nbnUgZ2V0dGltZSBn ZXR0aW1lb2ZkYXkgZ2l0bG9nLXRvLWNoYW5nZWxvZyBpbnRwcm9wcyBsYXJnZWZpbGUgbHN0 YXQgbWFueXdhcm5pbmdzIG1lbXJjaHIgbWtvc3RlbXAgbWt0aW1lIHBpcGUyIHBzZWxlY3Qg cHRocmVhZF9zaWdtYXNrIHB1dGVudiBxY29weS1hY2wgcmVhZGxpbmsgcmVhZGxpbmthdCBz aWcyc3RyIHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGRlZiBzdGRpbyBzdHBjcHkg c3RyZnRpbWUgc3RydG9pbWF4IHN0cnRvdW1heCBzeW1saW5rIHN5c19zdGF0IHN5c190aW1l IHRpbWUgdGltZV9yIHRpbWVfcnogdGltZWdtIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRp bWVzcGVjLXN1YiB1bnNldGVudiB1cGRhdGUtY29weXJpZ2h0IHV0aW1lbnMgdmxhIHdhcm5p bmdzCiAKIAogTU9TVExZQ0xFQU5GSUxFUyArPSBjb3JlICouc3RhY2tkdW1wCkBAIC02NTUs NiArNjU1LDE3IEBAIEVYVFJBX2xpYmdudV9hX1NPVVJDRVMgKz0gbWt0aW1lLmMKIAogIyMg ZW5kICAgZ251bGliIG1vZHVsZSBta3RpbWUKIAorIyMgYmVnaW4gZ251bGliIG1vZHVsZSBt a3RpbWUtaW50ZXJuYWwKKworaWYgZ2xfR05VTElCX0VOQUJMRURfNTI2NDI5NGFhMGE1NTU3 NTQxYjUzYzhjNzQxZjdmMzEKKworZW5kaWYKK0VYVFJBX0RJU1QgKz0gbWt0aW1lLWludGVy bmFsLmggbWt0aW1lLmMKKworRVhUUkFfbGliZ251X2FfU09VUkNFUyArPSBta3RpbWUuYwor CisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG1rdGltZS1pbnRlcm5hbAorCiAjIyBiZWdpbiBn bnVsaWIgbW9kdWxlIG9wZW5hdC1oCiAKIGlmIGdsX0dOVUxJQl9FTkFCTEVEXzAzZTBhYWFk NGNiODljYTc1NzY1M2JkMzY3YTZjY2I3CkBAIC0xNTg5LDEwICsxNjAwLDEyIEBAIHRpbWUu aDogdGltZS5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19I KSAkKEFSR19OT05OVUxMX0gpICQoCiAJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlBUSU1F JydALyQoR05VTElCX1NUUlBUSU1FKS9nJyBcCiAJICAgICAgLWUgJ3MvQCcnR05VTElCX1RJ TUVHTScnQC8kKEdOVUxJQl9USU1FR00pL2cnIFwKIAkgICAgICAtZSAncy9AJydHTlVMSUJf VElNRV9SJydALyQoR05VTElCX1RJTUVfUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJ Ql9USU1FX1JaJydALyQoR05VTElCX1RJTUVfUlopL2cnIFwKIAkgICAgICAtZSAnc3xAJydI QVZFX0RFQ0xfTE9DQUxUSU1FX1InJ0B8JChIQVZFX0RFQ0xfTE9DQUxUSU1FX1IpfGcnIFwK IAkgICAgICAtZSAnc3xAJydIQVZFX05BTk9TTEVFUCcnQHwkKEhBVkVfTkFOT1NMRUVQKXxn JyBcCiAJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJQVElNRScnQHwkKEhBVkVfU1RSUFRJTUUp fGcnIFwKIAkgICAgICAtZSAnc3xAJydIQVZFX1RJTUVHTScnQHwkKEhBVkVfVElNRUdNKXxn JyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9USU1FWk9ORV9UJydAfCQoSEFWRV9USU1FWk9O RV9UKXxnJyBcCiAJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9HTVRJTUUnJ0B8JChSRVBMQUNF X0dNVElNRSl8ZycgXAogCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTE9DQUxUSU1FJydAfCQo UkVQTEFDRV9MT0NBTFRJTUUpfGcnIFwKIAkgICAgICAtZSAnc3xAJydSRVBMQUNFX0xPQ0FM VElNRV9SJydAfCQoUkVQTEFDRV9MT0NBTFRJTUVfUil8ZycgXApAQCAtMTYyNCw2ICsxNjM3 LDI0IEBAIEVYVFJBX2xpYmdudV9hX1NPVVJDRVMgKz0gdGltZV9yLmMKIAogIyMgZW5kICAg Z251bGliIG1vZHVsZSB0aW1lX3IKIAorIyMgYmVnaW4gZ251bGliIG1vZHVsZSB0aW1lX3J6 CisKKworRVhUUkFfRElTVCArPSB0aW1lX3J6LmMKKworRVhUUkFfbGliZ251X2FfU09VUkNF UyArPSB0aW1lX3J6LmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB0aW1lX3J6CisKKyMj IGJlZ2luIGdudWxpYiBtb2R1bGUgdGltZWdtCisKKworRVhUUkFfRElTVCArPSBta3RpbWUt aW50ZXJuYWwuaCB0aW1lZ20uYworCitFWFRSQV9saWJnbnVfYV9TT1VSQ0VTICs9IHRpbWVn bS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdGltZWdtCisKICMjIGJlZ2luIGdudWxp YiBtb2R1bGUgdGltZXNwZWMKIAogbGliZ251X2FfU09VUkNFUyArPSB0aW1lc3BlYy5jCkBA IC0xODA2LDE1ICsxODM3LDYgQEAgRVhUUkFfRElTVCArPSB1bmlzdGQuaW4uaAogCiAjIyBl bmQgICBnbnVsaWIgbW9kdWxlIHVuaXN0ZAogCi0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHVu c2V0ZW52Ci0KLQotRVhUUkFfRElTVCArPSB1bnNldGVudi5jCi0KLUVYVFJBX2xpYmdudV9h X1NPVVJDRVMgKz0gdW5zZXRlbnYuYwotCi0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHVuc2V0 ZW52Ci0KICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgdXBkYXRlLWNvcHlyaWdodAogCiAKZGlm ZiAtLWdpdCBhL2xpYi9zdHJmdGltZS5jIGIvbGliL3N0cmZ0aW1lLmMKaW5kZXggMjQyNmFh ZS4uYzdjZWMyNiAxMDA2NDQKLS0tIGEvbGliL3N0cmZ0aW1lLmMKKysrIGIvbGliL3N0cmZ0 aW1lLmMKQEAgLTEyMSwyMiArMTIxLDExIEBAIGV4dGVybiBjaGFyICp0em5hbWVbXTsKIAog CiAjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIG1rdGltZV96KHR6LCB0bSkgbWt0aW1lICh0bSkK ICMgZGVmaW5lIHR6bmFtZSBfX3R6bmFtZQogIyBkZWZpbmUgdHpzZXQgX190enNldAogI2Vu ZGlmCiAKLSNpZiAhSEFWRV9UTV9HTVRPRkYKLS8qIFBvcnRhYmxlIHN0YW5kYWxvbmUgYXBw bGljYXRpb25zIHNob3VsZCBzdXBwbHkgYSAidGltZS5oIiB0aGF0Ci0gICBkZWNsYXJlcyBh IFBPU0lYLWNvbXBsaWFudCBsb2NhbHRpbWVfciwgZm9yIHRoZSBiZW5lZml0IG9mIG9sZGVy Ci0gICBpbXBsZW1lbnRhdGlvbnMgdGhhdCBsYWNrIGxvY2FsdGltZV9yIG9yIGhhdmUgYSBu b25zdGFuZGFyZCBvbmUuCi0gICBTZWUgdGhlIGdudWxpYiB0aW1lX3IgbW9kdWxlIGZvciBv bmUgd2F5IHRvIGltcGxlbWVudCB0aGlzLiAgKi8KLSMgdW5kZWYgX19nbXRpbWVfcgotIyB1 bmRlZiBfX2xvY2FsdGltZV9yCi0jIGRlZmluZSBfX2dtdGltZV9yIGdtdGltZV9yCi0jIGRl ZmluZSBfX2xvY2FsdGltZV9yIGxvY2FsdGltZV9yCi0jZW5kaWYKLQotCiAjaWZuZGVmIEZQ UklOVEZUSU1FCiAjIGRlZmluZSBGUFJJTlRGVElNRSAwCiAjZW5kaWYKQEAgLTM4NSwxMiAr Mzc0LDcgQEAgaXNvX3dlZWtfZGF5cyAoaW50IHlkYXksIGludCB3ZGF5KQogCiAvKiBXaGVu IGNvbXBpbGluZyB0aGlzIGZpbGUsIEdOVSBhcHBsaWNhdGlvbnMgY2FuICNkZWZpbmUgbXlf c3RyZnRpbWUKICAgIHRvIGEgc3ltYm9sICh0eXBpY2FsbHkgbnN0cmZ0aW1lKSB0byBnZXQg YW4gZXh0ZW5kZWQgc3RyZnRpbWUgd2l0aAotICAgZXh0cmEgYXJndW1lbnRzIFVUIGFuZCBO Uy4gIEVtYWNzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBub3csIGJ1dAotICAgdGhpcyBFbWFj cy1zcGVjaWZpYyBjb2RlIGNhbiBiZSByZW1vdmVkIG9uY2UgRW1hY3MncyBjb25maWcuaAot ICAgZGVmaW5lcyBteV9zdHJmdGltZS4gICovCi0jaWYgZGVmaW5lZCBlbWFjcyAmJiAhZGVm aW5lZCBteV9zdHJmdGltZQotIyBkZWZpbmUgbXlfc3RyZnRpbWUgbnN0cmZ0aW1lCi0jZW5k aWYKKyAgIGV4dHJhIGFyZ3VtZW50cyBUWiBhbmQgTlMuICAqLwogCiAjaWYgRlBSSU5URlRJ TUUKICMgdW5kZWYgbXlfc3RyZnRpbWUKQEAgLTM5OCw4ICszODIsOSBAQCBpc29fd2Vla19k YXlzIChpbnQgeWRheSwgaW50IHdkYXkpCiAjZW5kaWYKIAogI2lmZGVmIG15X3N0cmZ0aW1l Ci0jIGRlZmluZSBleHRyYV9hcmdzICwgdXQsIG5zCi0jIGRlZmluZSBleHRyYV9hcmdzX3Nw ZWMgLCBpbnQgdXQsIGludCBucworIyB1bmRlZiBIQVZFX1RaU0VUCisjIGRlZmluZSBleHRy YV9hcmdzICwgdHosIG5zCisjIGRlZmluZSBleHRyYV9hcmdzX3NwZWMgLCB0aW1lem9uZV90 IHR6LCBpbnQgbnMKICNlbHNlCiAjIGlmIGRlZmluZWQgQ09NUElMRV9XSURFCiAjICBkZWZp bmUgbXlfc3RyZnRpbWUgd2NzZnRpbWUKQEAgLTQxMSw3ICszOTYsNyBAQCBpc29fd2Vla19k YXlzIChpbnQgeWRheSwgaW50IHdkYXkpCiAjIGRlZmluZSBleHRyYV9hcmdzCiAjIGRlZmlu ZSBleHRyYV9hcmdzX3NwZWMKIC8qIFdlIGRvbid0IGhhdmUgdGhpcyBpbmZvcm1hdGlvbiBp biBnZW5lcmFsLiAgKi8KLSMgZGVmaW5lIHV0IDAKKyMgZGVmaW5lIHR6IDEKICMgZGVmaW5l IG5zIDAKICNlbmRpZgogCkBAIC00ODMsNyArNDY4LDcgQEAgc3RyZnRpbWVfY2FzZV8gKGJv b2wgdXBjYXNlLCBTVFJFQU1fT1JfQ0hBUl9UICpzLAogICB6b25lID0gKGNvbnN0IGNoYXIg KikgdHAtPnRtX3pvbmU7CiAjZW5kaWYKICNpZiBIQVZFX1RaTkFNRQotICBpZiAodXQpCisg IGlmICghdHopCiAgICAgewogICAgICAgaWYgKCEgKHpvbmUgJiYgKnpvbmUpKQogICAgICAg ICB6b25lID0gIkdNVCI7CkBAIC00OTYsNyArNDgxLDEyIEBAIHN0cmZ0aW1lX2Nhc2VfIChi b29sIHVwY2FzZSwgU1RSRUFNX09SX0NIQVJfVCAqcywKICAgICAgIHR6c2V0ICgpOwogIyBl bmRpZgogICAgIH0KKyAgLyogVGhlIHR6c2V0KCkgY2FsbCBtaWdodCBoYXZlIGNoYW5nZWQg dGhlIHZhbHVlLiAgKi8KKyAgaWYgKCEoem9uZSAmJiAqem9uZSkgJiYgdHAtPnRtX2lzZHN0 ID49IDApCisgICAgem9uZSA9IHR6bmFtZVt0cC0+dG1faXNkc3QgIT0gMF07CiAjZW5kaWYK KyAgaWYgKCEgem9uZSkKKyAgICB6b25lID0gIiI7CiAKICAgaWYgKGhvdXIxMiA+IDEyKQog ICAgIGhvdXIxMiAtPSAxMjsKQEAgLTExNDQsNyArMTEzNCw3IEBAIHN0cmZ0aW1lX2Nhc2Vf IChib29sIHVwY2FzZSwgU1RSRUFNX09SX0NIQVJfVCAqcywKICAgICAgICAgICAgIHRpbWVf dCB0OwogCiAgICAgICAgICAgICBsdG0gPSAqdHA7Ci0gICAgICAgICAgICB0ID0gbWt0aW1l ICgmbHRtKTsKKyAgICAgICAgICAgIHQgPSBta3RpbWVfeiAodHosICZsdG0pOwogCiAgICAg ICAgICAgICAvKiBHZW5lcmF0ZSBzdHJpbmcgdmFsdWUgZm9yIFQgdXNpbmcgdGltZV90IGFy aXRobWV0aWM7CiAgICAgICAgICAgICAgICB0aGlzIHdvcmtzIGV2ZW4gaWYgc2l6ZW9mIChs b25nKSA8IHNpemVvZiAodGltZV90KS4gICovCkBAIC0xMzE5LDE0ICsxMzA5LDYgQEAgc3Ry ZnRpbWVfY2FzZV8gKGJvb2wgdXBjYXNlLCBTVFJFQU1fT1JfQ0hBUl9UICpzLAogICAgICAg ICAgICAgICB0b19sb3djYXNlID0gdHJ1ZTsKICAgICAgICAgICAgIH0KIAotI2lmIEhBVkVf VFpOQU1FCi0gICAgICAgICAgLyogVGhlIHR6c2V0KCkgY2FsbCBtaWdodCBoYXZlIGNoYW5n ZWQgdGhlIHZhbHVlLiAgKi8KLSAgICAgICAgICBpZiAoISh6b25lICYmICp6b25lKSAmJiB0 cC0+dG1faXNkc3QgPj0gMCkKLSAgICAgICAgICAgIHpvbmUgPSB0em5hbWVbdHAtPnRtX2lz ZHN0ICE9IDBdOwotI2VuZGlmCi0gICAgICAgICAgaWYgKCEgem9uZSkKLSAgICAgICAgICAg IHpvbmUgPSAiIjsKLQogI2lmZGVmIENPTVBJTEVfV0lERQogICAgICAgICAgIHsKICAgICAg ICAgICAgIC8qIFRoZSB6b25lIHN0cmluZyBpcyBhbHdheXMgZ2l2ZW4gaW4gbXVsdGlieXRl IGZvcm0uICBXZSBoYXZlCkBAIC0xMzY2LDcgKzEzNDgsNyBAQCBzdHJmdGltZV9jYXNlXyAo Ym9vbCB1cGNhc2UsIFNUUkVBTV9PUl9DSEFSX1QgKnMsCiAjaWYgSEFWRV9UTV9HTVRPRkYK ICAgICAgICAgICAgIGRpZmYgPSB0cC0+dG1fZ210b2ZmOwogI2Vsc2UKLSAgICAgICAgICAg IGlmICh1dCkKKyAgICAgICAgICAgIGlmICghdHopCiAgICAgICAgICAgICAgIGRpZmYgPSAw OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICB7CkBAIC0xMzc1LDcgKzEzNTcs NyBAQCBzdHJmdGltZV9jYXNlXyAoYm9vbCB1cGNhc2UsIFNUUkVBTV9PUl9DSEFSX1QgKnMs CiAgICAgICAgICAgICAgICAgdGltZV90IGx0OwogCiAgICAgICAgICAgICAgICAgbHRtID0g KnRwOwotICAgICAgICAgICAgICAgIGx0ID0gbWt0aW1lICgmbHRtKTsKKyAgICAgICAgICAg ICAgICBsdCA9IG1rdGltZV96ICh0eiwgJmx0bSk7CiAKICAgICAgICAgICAgICAgICBpZiAo bHQgPT0gKHRpbWVfdCkgLTEpCiAgICAgICAgICAgICAgICAgICB7CkBAIC0xMzg0LDcgKzEz NjYsNyBAQCBzdHJmdGltZV9jYXNlXyAoYm9vbCB1cGNhc2UsIFNUUkVBTV9PUl9DSEFSX1Qg KnMsCiAgICAgICAgICAgICAgICAgICAgICAgIG9jY3VycmVkLiAgKi8KICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHRtIHRtOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICghIF9f bG9jYWx0aW1lX3IgKCZsdCwgJnRtKQorICAgICAgICAgICAgICAgICAgICBpZiAoISBsb2Nh bHRpbWVfcnogKHR6LCAmbHQsICZ0bSkKICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgo bHRtLnRtX3NlYyBeIHRtLnRtX3NlYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IChsdG0udG1fbWluIF4gdG0udG1fbWluKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgKGx0bS50bV9ob3VyIF4gdG0udG1faG91cikKQEAgLTEzOTQsNyArMTM3Niw3IEBAIHN0 cmZ0aW1lX2Nhc2VfIChib29sIHVwY2FzZSwgU1RSRUFNX09SX0NIQVJfVCAqcywKICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg ICAgICAgICAgIGlmICghIF9fZ210aW1lX3IgKCZsdCwgJmd0bSkpCisgICAgICAgICAgICAg ICAgaWYgKCEgbG9jYWx0aW1lX3J6ICgwLCAmbHQsICZndG0pKQogICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBkaWZmID0gdG1fZGlmZiAoJmx0bSwgJmd0 bSk7CkBAIC0xNDczLDE1ICsxNDU1LDMgQEAgbXlfc3RyZnRpbWUgKFNUUkVBTV9PUl9DSEFS X1QgKnMsIFNUUkZUSU1FX0FSRyAoc2l6ZV90IG1heHNpemUpCiAjaWYgZGVmaW5lZCBfTElC QyAmJiAhIEZQUklOVEZUSU1FCiBsaWJjX2hpZGRlbl9kZWYgKG15X3N0cmZ0aW1lKQogI2Vu ZGlmCi0KLQotI2lmIGRlZmluZWQgZW1hY3MgJiYgISBGUFJJTlRGVElNRQotLyogRm9yIEVt YWNzIHdlIGhhdmUgYSBzZXBhcmF0ZSBpbnRlcmZhY2Ugd2hpY2ggY29ycmVzcG9uZHMgdG8g dGhlIG5vcm1hbAotICAgc3RyZnRpbWUgZnVuY3Rpb24gcGx1cyB0aGUgdXQgYXJndW1lbnQs IGJ1dCB3aXRob3V0IHRoZSBucyBhcmd1bWVudC4gICovCi1zaXplX3QKLWVtYWNzX3N0cmZ0 aW1ldSAoY2hhciAqcywgc2l6ZV90IG1heHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKLSAg ICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRtICp0cCwgaW50IHV0KQotewotICByZXR1 cm4gbXlfc3RyZnRpbWUgKHMsIG1heHNpemUsIGZvcm1hdCwgdHAsIHV0LCAwKTsKLX0KLSNl bmRpZgpkaWZmIC0tZ2l0IGEvbGliL3N0cmZ0aW1lLmggYi9saWIvc3RyZnRpbWUuaAppbmRl eCAzOTY3YWZjLi4yY2U2Y2M1IDEwMDY0NAotLS0gYS9saWIvc3RyZnRpbWUuaAorKysgYi9s aWIvc3RyZnRpbWUuaApAQCAtMjMsMTEgKzIzLDEwIEBAIGV4dGVybiAiQyIgewogCiAvKiBK dXN0IGxpa2Ugc3RyZnRpbWUsIGJ1dCB3aXRoIHR3byBtb3JlIGFyZ3VtZW50czoKICAgIFBP U0lYIHJlcXVpcmVzIHRoYXQgc3RyZnRpbWUgdXNlIHRoZSBsb2NhbCB0aW1lem9uZSBpbmZv cm1hdGlvbi4KLSAgIFdoZW4gX19VVEMgaXMgbm9uemVybyBhbmQgdG0tPnRtX3pvbmUgaXMg TlVMTCBvciB0aGUgZW1wdHkgc3RyaW5nLAotICAgdXNlIFVUQyBpbnN0ZWFkLiAgVXNlIF9f TlMgYXMgdGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyBpbiB0aGUKLSAgICVOIGRpcmVjdGl2 ZS4gICovCisgICBVc2UgdGhlIHRpbWV6b25lIF9fVFogaW5zdGVhZC4gIFVzZSBfX05TIGFz IHRoZSBudW1iZXIgb2YKKyAgIG5hbm9zZWNvbmRzIGluIHRoZSAlTiBkaXJlY3RpdmUuICAq Lwogc2l6ZV90IG5zdHJmdGltZSAoY2hhciAqLCBzaXplX3QsIGNoYXIgY29uc3QgKiwgc3Ry dWN0IHRtIGNvbnN0ICosCi0gICAgICAgICAgICAgICAgICBpbnQgX191dGMsIGludCBfX25z KTsKKyAgICAgICAgICAgICAgICAgIHRpbWV6b25lX3QgX190eiwgaW50IF9fbnMpOwogCiAj aWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2xpYi90aW1lLmluLmggYi9saWIv dGltZS5pbi5oCmluZGV4IDFhNmI3NDYuLmE5ODNmNDkgMTAwNjQ0Ci0tLSBhL2xpYi90aW1l LmluLmgKKysrIGIvbGliL3RpbWUuaW4uaApAQCAtMjMxLDYgKzIzMSwyNSBAQCBfR0xfQ1hY QUxJQVNfU1lTIChzdHJwdGltZSwgY2hhciAqLCAoY2hhciBjb25zdCAqcmVzdHJpY3QgX19i dWYsCiBfR0xfQ1hYQUxJQVNXQVJOIChzdHJwdGltZSk7CiAjIGVuZGlmCiAKKyMgaWYgZGVm aW5lZCBfR05VX1NPVVJDRSAmJiBAR05VTElCX1RJTUVfUlpAICYmICEgQEhBVkVfVElNRVpP TkVfVEAKK3R5cGVkZWYgc3RydWN0IHRtX3pvbmUgKnRpbWV6b25lX3Q7CitfR0xfRlVOQ0RF Q0xfU1lTICh0emFsbG9jLCB0aW1lem9uZV90LCAoY2hhciBjb25zdCAqX19uYW1lKSk7Citf R0xfQ1hYQUxJQVNfU1lTICh0emFsbG9jLCB0aW1lem9uZV90LCAoY2hhciBjb25zdCAqX19u YW1lKSk7CitfR0xfRlVOQ0RFQ0xfU1lTICh0emZyZWUsIHZvaWQsICh0aW1lem9uZV90IF9f dHopKTsKK19HTF9DWFhBTElBU19TWVMgKHR6ZnJlZSwgdm9pZCwgKHRpbWV6b25lX3QgX190 eikpOworX0dMX0ZVTkNERUNMX1NZUyAobG9jYWx0aW1lX3J6LCBzdHJ1Y3QgdG0gKiwKKyAg ICAgICAgICAgICAgICAgICh0aW1lem9uZV90IF9fdHosIHRpbWVfdCBjb25zdCAqcmVzdHJp Y3QgX190aW1lciwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnJlc3RyaWN0IF9f cmVzdWx0KSBfR0xfQVJHX05PTk5VTEwgKCgyLCAzKSkpOworX0dMX0NYWEFMSUFTX1NZUyAo bG9jYWx0aW1lX3J6LCBzdHJ1Y3QgdG0gKiwKKyAgICAgICAgICAgICAgICAgICh0aW1lem9u ZV90IF9fdHosIHRpbWVfdCBjb25zdCAqcmVzdHJpY3QgX190aW1lciwKKyAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdG0gKnJlc3RyaWN0IF9fcmVzdWx0KSk7CitfR0xfRlVOQ0RFQ0xf U1lTIChta3RpbWVfeiwgdGltZV90LAorICAgICAgICAgICAgICAgICAgKHRpbWV6b25lX3Qg X190eiwgc3RydWN0IHRtICpyZXN0cmljdCBfX3Jlc3VsdCkKKyAgICAgICAgICAgICAgICAg IF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CitfR0xfQ1hYQUxJQVNfU1lTIChta3RpbWVfeiwg dGltZV90LAorICAgICAgICAgICAgICAgICAgKHRpbWV6b25lX3QgX190eiwgc3RydWN0IHRt ICpyZXN0cmljdCBfX3Jlc3VsdCkpOworIyBlbmRpZgorCiAvKiBDb252ZXJ0IFRNIHRvIGEg dGltZV90IHZhbHVlLCBhc3N1bWluZyBVVEMuICAqLwogIyBpZiBAR05VTElCX1RJTUVHTUAK ICMgIGlmIEBSRVBMQUNFX1RJTUVHTUAKZGlmZiAtLWdpdCBhL2xpYi90aW1lX3J6LmMgYi9s aWIvdGltZV9yei5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNGQ3 ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdGltZV9yei5jCkBAIC0wLDAgKzEsMzc0IEBA CisvKiBUaW1lIHpvbmUgZnVuY3Rpb25zIHN1Y2ggYXMgdHphbGxvYyBhbmQgbG9jYWx0aW1l X3J6CisKKyAgIENvcHlyaWdodCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9w dGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisK Ky8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICAqLworCisvKiBBbHRob3VnaCB0aGlzIG1v ZHVsZSBpcyBub3QgdGhyZWFkLXNhZmUsIGFueSByYWNlcyBzaG91bGQgYmUgZmFpcmx5Cisg ICByYXJlIGFuZCByZWFzb25hYmx5IGJlbmlnbi4gIEZvciBjb21wbGV0ZSB0aHJlYWQtc2Fm ZXR5LCB1c2UgYSBDCisgICBsaWJyYXJ5IHdpdGggYSB3b3JraW5nIHRpbWV6b25lX3QgdHlw ZSwgc28gdGhhdCB0aGlzIG1vZHVsZSBpcyBub3QKKyAgIG5lZWRlZC4gICovCisKKyNpbmNs dWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgPGVycm5v Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1 ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgIUhBVkVfVFpTRVQK K3N0YXRpYyB2b2lkIHR6c2V0ICh2b2lkKSB7IH0KKyNlbmRpZgorCisvKiBBIHRpbWUgem9u ZSBydWxlLiAgKi8KK3N0cnVjdCB0bV96b25lCit7CisgIC8qIE1vcmUgYWJicmV2aWF0aW9u cywgc2hvdWxkIHRoZXkgYmUgbmVlZGVkLiAgVGhlaXIgVFpfSVNfU0VUCisgICAgIG1lbWJl cnMgYXJlIHplcm8uICAqLworICB0aW1lem9uZV90IG5leHQ7CisKKyAgLyogSWYgbm9uemVy bywgdGhlIHJ1bGUgcmVwcmVzZW50cyB0aGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0 CisgICAgIHRvIHRoZSBmaXJzdCAiYWJicmV2aWF0aW9uIiAodGhpcyBtYXkgYmUgdGhlIGVt cHR5IHN0cmluZykuCisgICAgIE90aGVyd2lzZSwgaXQgcmVwcmVzZW50cyBhbiB1bnNldCBU Wi4gICovCisgIGNoYXIgdHpfaXNfc2V0OworCisgIC8qIEEgc2VxdWVuY2Ugb2YgbnVsbC10 ZXJtaW5hdGVkIHN0cmluZ3MgcGFja2VkIG5leHQgdG8gZWFjaCBvdGhlci4KKyAgICAgVGhl IHN0cmluZ3MgYXJlIGZvbGxvd2VkIGJ5IGFuIGV4dHJhIG51bGwgYnl0ZS4gIElmIFRaX0lT X1NFVCwKKyAgICAgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgc3RyaW5nIGFuZCB0aGUg Zmlyc3Qgc3RyaW5nICh3aGljaCBpcworICAgICBhY3R1YWxseSBhIFRaIGVudmlyb25tZW50 IHZhbHVlIHZhbHVlKSBtYXkgYmUgZW1wdHkuICBPdGhlcndpc2UKKyAgICAgYWxsIHN0cmlu Z3MgbXVzdCBiZSBub25lbXB0eS4KKworICAgICBBYmJyZXZpYXRpb25zIGFyZSBzdG9yZWQg aGVyZSBiZWNhdXNlIG90aGVyd2lzZSB0aGUgdmFsdWVzIG9mCisgICAgIHRtX3pvbmUgYW5k L29yIHR6bmFtZSB3b3VsZCBiZSBkZWFkIGFmdGVyIGNoYW5naW5nIFRaIGFuZCBjYWxsaW5n CisgICAgIHR6c2V0LiAgQWJicmV2aWF0aW9ucyBuZXZlciBtb3ZlIG9uY2UgYWxsb2NhdGVk LCBhbmQgYXJlIGxpdmUKKyAgICAgdW50aWwgdHpmcmVlIGlzIGNhbGxlZC4gICovCisgIGNo YXIgYWJicnNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK307CisKKy8qIFRoZSBhcHByb3hp bWF0ZSBzaXplIHRvIHVzZSBmb3Igc21hbGwgYWxsb2NhdGlvbiByZXF1ZXN0cy4gIFRoaXMg aXMKKyAgIHRoZSBsYXJnZXN0ICJzbWFsbCIgcmVxdWVzdCBmb3IgdGhlIEdOVSBDIGxpYnJh cnkgbWFsbG9jLiAgKi8KK2VudW0geyBERUZBVUxUX01YRkFTVCA9IDY0ICogc2l6ZW9mIChz aXplX3QpIC8gNCB9OworCisvKiBNaW5pbXVtIHNpemUgb2YgdGhlIEFCQlJTIG1lbWJlciBv ZiBzdHJ1Y3QgYWJici4gIEFCQlJTIGlzIGxhcmdlcgorICAgb25seSBpbiB0aGUgdW5saWtl bHkgY2FzZSB3aGVyZSBhbiBhYmJyZXZpYXRpb24gbG9uZ2VyIHRoYW4gdGhpcyBpcworICAg dXNlZC4gICovCitlbnVtIHsgQUJCUl9TSVpFX01JTiA9IERFRkFVTFRfTVhGQVNUIC0gb2Zm c2V0b2YgKHN0cnVjdCB0bV96b25lLCBhYmJycykgfTsKKworc3RhdGljIGNoYXIgY29uc3Qg VFpbXSA9ICJUWiI7CisKKy8qIE1hZ2ljIGNvb2tpZSB0aW1lem9uZV90IHZhbHVlLCBmb3Ig bG9jYWwgdGltZS4gIEl0IGRpZmZlcnMgZnJvbQorICAgTlVMTCBhbmQgZnJvbSBhbGwgb3Ro ZXIgdGltZXpvbmVfdCB2YWx1ZXMuICBPbmx5IHRoZSBhZGRyZXNzCisgICBtYXR0ZXJzOyB0 aGUgcG9pbnRlciBpcyBuZXZlciBkZXJlZmVyZW5jZWQuICAqLworc3RhdGljIHRpbWV6b25l X3QgY29uc3QgbG9jYWxfdHogPSAodGltZXpvbmVfdCkgMTsKKworI2lmIEhBVkVfVE1fWk9O RSB8fCBIQVZFX1RaTkFNRQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWVzIEEgYW5k IEIgZGlmZmVyIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yCisgICB0bV9pc2RzdDogQSBh bmQgQiBkaWZmZXIgaWYgb25lIGlzIHplcm8gYW5kIHRoZSBvdGhlciBwb3NpdGl2ZS4gICov CitzdGF0aWMgYm9vbAoraXNkc3RfZGlmZmVyIChpbnQgYSwgaW50IGIpCit7CisgIHJldHVy biAhYSAhPSAhYiAmJiAwIDw9IGEgJiYgMCA8PSBiOworfQorCisvKiBSZXR1cm4gdHJ1ZSBp ZiBBIGFuZCBCIGFyZSBlcXVhbC4gICovCitzdGF0aWMgaW50CitlcXVhbF90bSAoY29uc3Qg c3RydWN0IHRtICphLCBjb25zdCBzdHJ1Y3QgdG0gKmIpCit7CisgIHJldHVybiAhICgoYS0+ dG1fc2VjIF4gYi0+dG1fc2VjKQorICAgICAgICAgICAgfCAoYS0+dG1fbWluIF4gYi0+dG1f bWluKQorICAgICAgICAgICAgfCAoYS0+dG1faG91ciBeIGItPnRtX2hvdXIpCisgICAgICAg ICAgICB8IChhLT50bV9tZGF5IF4gYi0+dG1fbWRheSkKKyAgICAgICAgICAgIHwgKGEtPnRt X21vbiBeIGItPnRtX21vbikKKyAgICAgICAgICAgIHwgKGEtPnRtX3llYXIgXiBiLT50bV95 ZWFyKQorICAgICAgICAgICAgfCBpc2RzdF9kaWZmZXIgKGEtPnRtX2lzZHN0LCBiLT50bV9p c2RzdCkpOworfQorCisjZW5kaWYKKworLyogQ29weSB0byBBQkJSUyB0aGUgYWJicmV2aWF0 aW9uIGF0IEFCQlIgd2l0aCBzaXplIEFCQlJfU0laRSAodGhpcworICAgaW5jbHVkZXMgaXRz IHRyYWlsaW5nIG51bGwgYnl0ZSkuICBBcHBlbmQgYW4gZXh0cmEgbnVsbCBieXRlIHRvCisg ICBtYXJrIHRoZSBlbmQgb2YgQUJCUlMuICAqLworc3RhdGljIHZvaWQKK2V4dGVuZF9hYmJy cyAoY2hhciAqYWJicnMsIGNoYXIgY29uc3QgKmFiYnIsIHNpemVfdCBhYmJyX3NpemUpCit7 CisgIG1lbWNweSAoYWJicnMsIGFiYnIsIGFiYnJfc2l6ZSk7CisgIGFiYnJzW2FiYnJfc2l6 ZV0gPSAnXDAnOworfQorCisvKiBSZXR1cm4gYSBuZXdseSBhbGxvY2F0ZWQgdGltZSB6b25l IGZvciBOQU1FLCBvciBOVUxMIG9uIGZhaWx1cmUuCisgICBBcyBhIHNwZWNpYWwgY2FzZSwg cmV0dXJuIGEgbm9uemVybyBjb25zdGFudCBmb3Igd2FsbCBjbG9jayB0aW1lLCBhCisgICBj b25zdGFudCB0aGF0IHN1cnZpdmVzIGZyZWVpbmcuICAqLwordGltZXpvbmVfdAordHphbGxv YyAoY2hhciBjb25zdCAqbmFtZSkKK3sKKyAgc2l6ZV90IG5hbWVfc2l6ZSA9IG5hbWUgPyBz dHJsZW4gKG5hbWUpICsgMSA6IDA7CisgIHNpemVfdCBhYmJyX3NpemUgPSBuYW1lX3NpemUg PCBBQkJSX1NJWkVfTUlOID8gQUJCUl9TSVpFX01JTiA6IG5hbWVfc2l6ZSArIDE7CisgIHRp bWV6b25lX3QgdHogPSBtYWxsb2MgKG9mZnNldG9mIChzdHJ1Y3QgdG1fem9uZSwgYWJicnMp ICsgYWJicl9zaXplKTsKKyAgaWYgKHR6KQorICAgIHsKKyAgICAgIHR6LT5uZXh0ID0gTlVM TDsKKyAgICAgIHR6LT50el9pc19zZXQgPSAhIW5hbWU7CisgICAgICBleHRlbmRfYWJicnMg KHR6LT5hYmJycywgbmFtZSwgbmFtZV9zaXplKTsKKyAgICB9CisgIHJldHVybiB0ejsKK30K KworI2lmIEhBVkVfVFpOQU1FCisvKiBJZiBUWk5BTUVfQUREUkVTUyBpcyBub25udWxsLCBh biBhc3NpZ25tZW50IG9mIGEgc2F2ZWQgYWJicmV2aWF0aW9uLgorICAgVFpOQU1FX0FERFJF U1Mgc2hvdWxkIGJlIGVpdGhlciBudWxsLCBvciAmdHpuYW1lWzBdLCBvciAmdHpuYW1lWzFd LgorICAgKlRaTkFNRV9BRERSRVNTID0gVFpOQU1FX1ZBTFVFIHNob3VsZCBiZSBkb25lIGFm dGVyIHJldmVydF90egorICAgKGluZGlyZWN0bHkpIGNhbGxzIHR6c2V0LCBzbyB0aGF0IHJl dmVydF90eiBjYW4gb3ZlcndyaXRlIHR6c2V0J3MKKyAgIGFzc2lnbm1lbnQgdG8gdHpuYW1l LiAgQWxzbywgaXQgc2hvdWxkIGJlIGRvbmUgYXQgdGhlIHN0YXJ0IG9mCisgICB0aGUgbmV4 dCBsb2NhbHRpbWVfdHogb3IgbWt0aW1lX3osIHRvIHVuZG8gdGhlIG92ZXJ3cml0ZS4gICov CitzdGF0aWMgY2hhciAqKnR6bmFtZV9hZGRyZXNzOworc3RhdGljIGNoYXIgKnR6bmFtZV92 YWx1ZTsKKyNlbmRpZgorCisvKiBTYXZlIGludG8gVFogYW55IG5vbnRyaXZpYWwgdGltZSB6 b25lIGFiYnJldmlhdGlvbiB1c2VkIGJ5IFRNLAorICAgYW5kIHVwZGF0ZSAqVE0gKG9yIHBy ZXBhcmUgdG8gdXBkYXRlIHR6bmFtZSkgaWYgdGhleSB1c2UgdGhlIGFiYnJldmlhdGlvbi4K KyAgIFJldHVybiB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIChzZXR0aW5nIGVycm5vKSBv dGhlcndpc2UuICAqLworc3RhdGljIGJvb2wKK3NhdmVfYWJiciAodGltZXpvbmVfdCB0eiwg c3RydWN0IHRtICp0bSkKK3sKKyNpZiBIQVZFX1RNX1pPTkUgfHwgSEFWRV9UWk5BTUUKKyAg Y2hhciBjb25zdCAqem9uZSA9IE5VTEw7CisgIGNoYXIgKip0em5hbWVfem9uZSA9IE5VTEw7 CisgIGNoYXIgKnpvbmVfY29weSA9IChjaGFyICopICIiOworIyBpZiBIQVZFX1RNX1pPTkUK KyAgem9uZSA9IHRtLT50bV96b25lOworIyBlbmRpZgorIyBpZiBIQVZFX1RaTkFNRQorICBp ZiAoISAoem9uZSAmJiAqem9uZSkgJiYgMCA8PSB0bS0+dG1faXNkc3QpCisgICAgem9uZSA9 ICoodHpuYW1lX3pvbmUgPSAmdHpuYW1lWzAgPCB0bS0+dG1faXNkc3RdKTsKKyMgZW5kaWYK KworICAvKiBObyBuZWVkIHRvIHJlcGxhY2UgbnVsbCB6b25lcywgb3Igem9uZXMgd2l0aGlu IHRoZSBzdHJ1Y3QgdG0uICAqLworICBpZiAoIXpvbmUgfHwgKChjaGFyICopIHRtIDw9IHpv bmUgJiYgem9uZSA8IChjaGFyICopICh0bSArIDEpKSkKKyAgICByZXR1cm4gdHJ1ZTsKKwor ICBpZiAoKnpvbmUpCisgICAgeworICAgICAgem9uZV9jb3B5ID0gdHotPmFiYnJzOworCisg ICAgICB3aGlsZSAoc3RyY21wICh6b25lX2NvcHksIHpvbmUpICE9IDApCisgICAgICAgIHsK KyAgICAgICAgICBpZiAoISAoKnpvbmVfY29weSB8fCAoem9uZV9jb3B5ID09IHR6LT5hYmJy cyAmJiB0ei0+dHpfaXNfc2V0KSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNp emVfdCB6b25lX3NpemUgPSBzdHJsZW4gKHpvbmUpICsgMTsKKyAgICAgICAgICAgICAgaWYg KHpvbmVfc2l6ZSA8IHR6LT5hYmJycyArIEFCQlJfU0laRV9NSU4gLSB6b25lX2NvcHkpCisg ICAgICAgICAgICAgICAgZXh0ZW5kX2FiYnJzICh6b25lX2NvcHksIHpvbmUsIHpvbmVfc2l6 ZSk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICB0eiA9IHR6LT5uZXh0ID0gdHphbGxvYyAoem9uZSk7CisgICAgICAgICAgICAg ICAgICBpZiAoIXR6KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg ICAgICAgICAgICAgICB0ei0+dHpfaXNfc2V0ID0gMDsKKyAgICAgICAgICAgICAgICAgIHpv bmVfY29weSA9IHR6LT5hYmJyczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgem9uZV9jb3B5ICs9IHN0cmxl biAoem9uZV9jb3B5KSArIDE7CisgICAgICAgICAgaWYgKCEqem9uZV9jb3B5ICYmIHR6LT5u ZXh0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0eiA9IHR6LT5uZXh0OworICAg ICAgICAgICAgICB6b25lX2NvcHkgPSB0ei0+YWJicnM7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisKKyAgLyogUmVwbGFjZSB0aGUgem9uZSBuYW1lIHNvIHRoYXQgaXRz IGxpZmV0aW1lIG1hdGNoZXMgdGhhdCBvZiBUWi4gICovCisjIGlmIEhBVkVfVE1fWk9ORQor ICBpZiAoIXR6bmFtZV96b25lKQorICAgIHRtLT50bV96b25lID0gem9uZV9jb3B5OworIyBl bmRpZgorIyBpZiBIQVZFX1RaTkFNRQorICB0em5hbWVfYWRkcmVzcyA9IHR6bmFtZV96b25l OworICB0em5hbWVfdmFsdWUgPSB6b25lX2NvcHk7CisjIGVuZGlmCisjZW5kaWYKKyAgcmV0 dXJuIHRydWU7Cit9CisKKy8qIEZyZWUgYSB0aW1lIHpvbmUuICAqLwordm9pZAordHpmcmVl ICh0aW1lem9uZV90IHR6KQoreworICBpZiAodHogIT0gbG9jYWxfdHopCisgICAgd2hpbGUg KHR6KQorICAgICAgeworICAgICAgICB0aW1lem9uZV90IG5leHQgPSB0ei0+bmV4dDsKKyAg ICAgICAgZnJlZSAodHopOworICAgICAgICB0eiA9IG5leHQ7CisgICAgICB9Cit9CisKKy8q IEdldCBhbmQgc2V0IHRoZSBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFRoZXNlIGZ1bmN0 aW9ucyBjYW4gYmUKKyAgIG92ZXJyaWRkZW4gYnkgcHJvZ3JhbXMgbGlrZSBFbWFjcyB0aGF0 IG1hbmFnZSB0aGVpciBvd24gZW52aXJvbm1lbnQuICAqLworCisjaWZuZGVmIGdldGVudl9U Wgorc3RhdGljIGNoYXIgKgorZ2V0ZW52X1RaICh2b2lkKQoreworICByZXR1cm4gZ2V0ZW52 IChUWik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBzZXRlbnZfVFoKK3N0YXRpYyBpbnQKK3Nl dGVudl9UWiAoY2hhciBjb25zdCAqdHopCit7CisgIHJldHVybiB0eiA/IHNldGVudiAoVFos IHR6LCAxKSA6IHVuc2V0ZW52IChUWik7Cit9CisjZW5kaWYKKworLyogQ2hhbmdlIHRoZSBl bnZpcm9ubWVudCB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIHRpbWV6b25lX3QgdmFsdWUuCisg ICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSAoc2V0dGluZyBlcnJubykgb3Ro ZXJ3aXNlLiAgKi8KK3N0YXRpYyBib29sCitjaGFuZ2VfZW52ICh0aW1lem9uZV90IHR6KQor eworICBpZiAoc2V0ZW52X1RaICh0ei0+dHpfaXNfc2V0ID8gdHotPmFiYnJzIDogTlVMTCkg IT0gMCkKKyAgICByZXR1cm4gZmFsc2U7CisgIHR6c2V0ICgpOworICByZXR1cm4gdHJ1ZTsK K30KKworLyogVGVtcG9yYXJpbHkgc2V0IHRoZSB0aW1lIHpvbmUgdG8gVFosIHdoaWNoIG11 c3Qgbm90IGJlIG51bGwuCisgICBSZXR1cm4gTE9DQUxfVFogaWYgdGhlIHRpbWUgem9uZSBz ZXR0aW5nIGlzIGFscmVhZHkgY29ycmVjdC4KKyAgIE90aGVyd2lzZSByZXR1cm4gYSBuZXds eSBhbGxvY2F0ZWQgdGltZSB6b25lIHJlcHJlc2VudGluZyB0aGUgb2xkCisgICBzZXR0aW5n LCBvciBOVUxMIChzZXR0aW5nIGVycm5vKSBvbiBmYWlsdXJlLiAgKi8KK3N0YXRpYyB0aW1l em9uZV90CitzZXRfdHogKHRpbWV6b25lX3QgdHopCit7CisgIGNoYXIgKmVudl90eiA9IGdl dGVudl9UWiAoKTsKKyAgaWYgKGVudl90egorICAgICAgPyB0ei0+dHpfaXNfc2V0ICYmIHN0 cmNtcCAodHotPmFiYnJzLCBlbnZfdHopID09IDAKKyAgICAgIDogIXR6LT50el9pc19zZXQp CisgICAgcmV0dXJuIGxvY2FsX3R6OworICBlbHNlCisgICAgeworICAgICAgdGltZXpvbmVf dCBvbGRfdHogPSB0emFsbG9jIChlbnZfdHopOworICAgICAgaWYgKCFvbGRfdHopCisgICAg ICAgIHJldHVybiBvbGRfdHo7CisgICAgICBpZiAoISBjaGFuZ2VfZW52ICh0eikpCisgICAg ICAgIHsKKyAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICB0 emZyZWUgKG9sZF90eik7CisgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAg ICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIG9sZF90ejsKKyAg ICB9Cit9CisKKy8qIFJlc3RvcmUgYW4gb2xkIHNldHRpbmcgcmV0dXJuZWQgYnkgc2V0X3R6 LiAgSXQgbXVzdCBub3QgYmUgbnVsbC4KKyAgIFJldHVybiB0cnVlIChwcmVzZXJ2aW5nIGVy cm5vKSBpZiBzdWNjZXNzZnVsLCBmYWxzZSAoc2V0dGluZyBlcnJubykKKyAgIG90aGVyd2lz ZS4gICovCitzdGF0aWMgYm9vbAorcmV2ZXJ0X3R6ICh0aW1lem9uZV90IHR6KQoreworICBp ZiAodHogPT0gbG9jYWxfdHopCisgICAgcmV0dXJuIHRydWU7CisgIGVsc2UKKyAgICB7Cisg ICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgIGJvb2wgb2sgPSBjaGFuZ2Vf ZW52ICh0eik7CisgICAgICBpZiAoIW9rKQorICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5v OworI2lmIEhBVkVfVFpOQU1FCisgICAgICBpZiAoIW9rKQorICAgICAgICB0em5hbWVfYWRk cmVzcyA9IE5VTEw7CisgICAgICBpZiAodHpuYW1lX2FkZHJlc3MpCisgICAgICAgIHsKKyAg ICAgICAgICBjaGFyICpvbGRfdmFsdWUgPSAqdHpuYW1lX2FkZHJlc3M7CisgICAgICAgICAg KnR6bmFtZV9hZGRyZXNzID0gdHpuYW1lX3ZhbHVlOworICAgICAgICAgIHR6bmFtZV92YWx1 ZSA9IG9sZF92YWx1ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICB0emZyZWUgKHR6KTsK KyAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgICByZXR1cm4gb2s7CisgICAgfQor fQorCisvKiBSZXN0b3JlIGFuIG9sZCB0em5hbWUgc2V0dGluZyB0aGF0IHdhcyB0ZW1wb3Jh cmlseSBtdW5nZWQgYnkgcmV2ZXJ0X3R6LiAgKi8KK3N0YXRpYyB2b2lkCityZXN0b3JlX3R6 bmFtZSAodm9pZCkKK3sKKyNpZiBIQVZFX1RaTkFNRQorICBpZiAodHpuYW1lX2FkZHJlc3Mp CisgICAgeworICAgICAgKnR6bmFtZV9hZGRyZXNzID0gdHpuYW1lX3ZhbHVlOworICAgICAg dHpuYW1lX2FkZHJlc3MgPSBOVUxMOworICAgIH0KKyNlbmRpZgorfQorCisvKiBVc2UgdGlt ZSB6b25lIFRaIHRvIGNvbXB1dGUgbG9jYWx0aW1lX3IgKFQsIFRNKS4gICovCitzdHJ1Y3Qg dG0gKgorbG9jYWx0aW1lX3J6ICh0aW1lem9uZV90IHR6LCB0aW1lX3QgY29uc3QgKnQsIHN0 cnVjdCB0bSAqdG0pCit7CisgIHJlc3RvcmVfdHpuYW1lICgpOworCisgIGlmICghdHopCisg ICAgcmV0dXJuIGdtdGltZV9yICh0LCB0bSk7CisgIGVsc2UKKyAgICB7CisgICAgICB0aW1l em9uZV90IG9sZF90eiA9IHNldF90eiAodHopOworICAgICAgaWYgKG9sZF90eikKKyAgICAg ICAgeworICAgICAgICAgIHRtID0gbG9jYWx0aW1lX3IgKHQsIHRtKTsKKyAgICAgICAgICBp ZiAodG0gJiYgIXNhdmVfYWJiciAodHosIHRtKSkKKyAgICAgICAgICAgIHRtID0gTlVMTDsK KyAgICAgICAgICBpZiAocmV2ZXJ0X3R6IChvbGRfdHopKQorICAgICAgICAgICAgcmV0dXJu IHRtOworICAgICAgICB9CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKy8qIFVz ZSB0aW1lIHpvbmUgVFogdG8gY29tcHV0ZSBta3RpbWUgKFRNKS4gICovCit0aW1lX3QKK21r dGltZV96ICh0aW1lem9uZV90IHR6LCBzdHJ1Y3QgdG0gKnRtKQoreworICByZXN0b3JlX3R6 bmFtZSAoKTsKKworICBpZiAoIXR6KQorICAgIHJldHVybiB0aW1lZ20gKHRtKTsKKyAgZWxz ZQorICAgIHsKKyAgICAgIHRpbWV6b25lX3Qgb2xkX3R6ID0gc2V0X3R6ICh0eik7CisgICAg ICBpZiAob2xkX3R6KQorICAgICAgICB7CisgICAgICAgICAgdGltZV90IHQgPSBta3RpbWUg KHRtKTsKKyNpZiBIQVZFX1RNX1pPTkUgfHwgSEFWRV9UWk5BTUUKKyAgICAgICAgICB0aW1l X3QgYmFkdGltZSA9IC0xOworICAgICAgICAgIHN0cnVjdCB0bSB0bV8xOworICAgICAgICAg IGlmICgodCAhPSBiYWR0aW1lCisgICAgICAgICAgICAgICB8fCAobG9jYWx0aW1lX3IgKCZ0 LCAmdG1fMSkgJiYgZXF1YWxfdG0gKHRtLCAmdG1fMSkpKQorICAgICAgICAgICAgICAmJiAh c2F2ZV9hYmJyICh0eiwgdG0pKQorICAgICAgICAgICAgdCA9IGJhZHRpbWU7CisjZW5kaWYK KyAgICAgICAgICBpZiAocmV2ZXJ0X3R6IChvbGRfdHopKQorICAgICAgICAgICAgcmV0dXJu IHQ7CisgICAgICAgIH0KKyAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CmRpZmYgLS1naXQg YS9saWIvdGltZWdtLmMgYi9saWIvdGltZWdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMTFjNDg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi90aW1lZ20uYwpA QCAtMCwwICsxLDM4IEBACisvKiBDb252ZXJ0IFVUQyBjYWxlbmRhciB0aW1lIHRvIHNpbXBs ZSB0aW1lLiAgTGlrZSBta3RpbWUgYnV0IGFzc3VtZXMgVVRDLgorCisgICBDb3B5cmlnaHQg KEMpIDE5OTQsIDE5OTcsIDIwMDMtMjAwNCwgMjAwNi0yMDA3LCAyMDA5LTIwMTUgRnJlZSBT b2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IEdOVSBDIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywg b3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LiAgKi8KKworI2lmbmRlZiBfTElCQworIyBpbmNsdWRlIDxjb25maWcuaD4KKyNl bmRpZgorCisjaW5jbHVkZSA8dGltZS5oPgorCisjaWZuZGVmIF9MSUJDCisjIHVuZGVmIF9f Z210aW1lX3IKKyMgZGVmaW5lIF9fZ210aW1lX3IgZ210aW1lX3IKKyMgZGVmaW5lIF9fbWt0 aW1lX2ludGVybmFsIG1rdGltZV9pbnRlcm5hbAorIyBpbmNsdWRlICJta3RpbWUtaW50ZXJu YWwuaCIKKyNlbmRpZgorCit0aW1lX3QKK3RpbWVnbSAoc3RydWN0IHRtICp0bXApCit7Cisg IHN0YXRpYyB0aW1lX3QgZ210aW1lX29mZnNldDsKKyAgdG1wLT50bV9pc2RzdCA9IDA7Cisg IHJldHVybiBfX21rdGltZV9pbnRlcm5hbCAodG1wLCBfX2dtdGltZV9yLCAmZ210aW1lX29m ZnNldCk7Cit9CmRpZmYgLS1naXQgYS9saXNwL3RpbWUtc3RhbXAuZWwgYi9saXNwL3RpbWUt c3RhbXAuZWwKaW5kZXggMjRlNWVmNC4uMWUwZmU5OSAxMDA2NDQKLS0tIGEvbGlzcC90aW1l LXN0YW1wLmVsCisrKyBiL2xpc3AvdGltZS1zdGFtcC5lbApAQCAtNDIwLDE2ICs0MjAsOCBA QCBmb3JtYXQgdGhlIHN0cmluZy4iCiAgIChvciB0cy1mb3JtYXQKICAgICAgIChzZXRxIHRz LWZvcm1hdCB0aW1lLXN0YW1wLWZvcm1hdCkpCiAgIChpZiAoc3RyaW5ncCB0cy1mb3JtYXQp Ci0gICAgICAoaWYgKHN0cmluZ3AgdGltZS1zdGFtcC10aW1lLXpvbmUpCi0JICAobGV0ICgo dHMtcmVhbC10aW1lLXpvbmUgKGdldGVudiAiVFoiKSkpCi0JICAgICh1bndpbmQtcHJvdGVj dAotCQkocHJvZ24KLQkJICAoc2V0ZW52ICJUWiIgdGltZS1zdGFtcC10aW1lLXpvbmUpCi0J CSAgKGZvcm1hdC10aW1lLXN0cmluZwotCQkgICAodGltZS1zdGFtcC1zdHJpbmctcHJlcHJv Y2VzcyB0cy1mb3JtYXQpKSkKLQkgICAgICAoc2V0ZW52ICJUWiIgdHMtcmVhbC10aW1lLXpv bmUpKSkKLQkoZm9ybWF0LXRpbWUtc3RyaW5nCi0JICh0aW1lLXN0YW1wLXN0cmluZy1wcmVw cm9jZXNzIHRzLWZvcm1hdCkpKQorICAgICAgKGZvcm1hdC10aW1lLXN0cmluZyAodGltZS1z dGFtcC1zdHJpbmctcHJlcHJvY2VzcyB0cy1mb3JtYXQpCisgICAgICAgICAgICAgICAgICAg ICAgICAgIG5pbCB0aW1lLXN0YW1wLXRpbWUtem9uZSkKICAgICA7OyBoYW5kbGUgdmVyc2lv biAxIGNvbXBhdGliaWxpdHkKICAgICAoY29uZCAoKG9yIChlcSB0aW1lLXN0YW1wLW9sZC1m b3JtYXQtd2FybiAnZXJyb3IpCiAJICAgICAgIChhbmQgKGVxIHRpbWUtc3RhbXAtb2xkLWZv cm1hdC13YXJuICdhc2spCmRpZmYgLS1naXQgYS9saXNwL3RpbWUuZWwgYi9saXNwL3RpbWUu ZWwKaW5kZXggYWUwZTU5OC4uZDM1ZjViOSAxMDA2NDQKLS0tIGEvbGlzcC90aW1lLmVsCisr KyBiL2xpc3AvdGltZS5lbApAQCAtMTYwLDE1ICsxNjAsOCBAQCBMQUJFTCBpcyBhIHN0cmlu ZyB0byBkaXNwbGF5IGFzIHRoZSBsYWJlbCBvZiB0aGF0IFRJTUVaT05FJ3MgdGltZS4iCiAo ZGVmY3VzdG9tIGRpc3BsYXktdGltZS13b3JsZC1saXN0CiAgIDs7IERldGVybWluZSBpZiB6 b25laW5mbyBzdHlsZSB0aW1lem9uZXMgYXJlIHN1cHBvcnRlZCBieSB0ZXN0aW5nIHRoYXQK ICAgOzsgQW1lcmljYS9OZXcgWW9yayBhbmQgRXVyb3BlL0xvbmRvbiByZXR1cm4gZGlmZmVy ZW50IHRpbWV6b25lcy4KLSAgKGxldCAoKG9sZC10eiAoZ2V0ZW52ICJUWiIpKQotCWdtdCBu eXQpCi0gICAgKHVud2luZC1wcm90ZWN0Ci0JKHByb2duCi0JICAoc2V0ZW52ICJUWiIgIkFt ZXJpY2EvTmV3X1lvcmsiKQotCSAgKHNldHEgbnl0IChmb3JtYXQtdGltZS1zdHJpbmcgIiV6 IikpCi0JICAoc2V0ZW52ICJUWiIgIkV1cm9wZS9Mb25kb24iKQotCSAgKHNldHEgZ210IChm b3JtYXQtdGltZS1zdHJpbmcgIiV6IikpKQotICAgICAgKHNldGVudiAiVFoiIG9sZC10eikp CisgIChsZXQgKChueXQgKGZvcm1hdC10aW1lLXN0cmluZyAiJXoiIG5pbCAiQW1lcmljYS9O ZXdfWW9yayIpKQorICAgICAgICAoZ210IChmb3JtYXQtdGltZS1zdHJpbmcgIiV6IiBuaWwg IkV1cm9wZS9Mb25kb24iKSkpCiAgICAgKGlmIChzdHJpbmctZXF1YWwgbnl0IGdtdCkKICAg ICAgICAgbGVnYWN5LXN0eWxlLXdvcmxkLWxpc3QKICAgICAgIHpvbmVpbmZvLXN0eWxlLXdv cmxkLWxpc3QpKQpAQCAtNTIzLDIxICs1MTYsMTkgQEAgU2VlIGBkaXNwbGF5LXRpbWUtd29y bGQnLiIKICAgIlJlcGxhY2UgY3VycmVudCBidWZmZXIgdGV4dCB3aXRoIHRpbWVzIGluIHZh cmlvdXMgem9uZXMsIGJhc2VkIG9uIEFMSVNULiIKICAgKGxldCAoKGluaGliaXQtcmVhZC1v bmx5IHQpCiAJKGJ1ZmZlci11bmRvLWxpc3QgdCkKLQkob2xkLXR6IChnZXRlbnYgIlRaIikp CisJKG5vdyAoY3VycmVudC10aW1lKSkKIAkobWF4LXdpZHRoIDApCiAJcmVzdWx0IGZtdCkK ICAgICAoZXJhc2UtYnVmZmVyKQotICAgICh1bndpbmQtcHJvdGVjdAotCShkb2xpc3QgKHpv bmUgYWxpc3QpCi0JICAobGV0KiAoKGxhYmVsIChjYWRyIHpvbmUpKQotCQkgKHdpZHRoIChz dHJpbmctd2lkdGggbGFiZWwpKSkKLQkgICAgKHNldGVudiAiVFoiIChjYXIgem9uZSkpCi0J ICAgIChwdXNoIChjb25zIGxhYmVsCi0JCQkoZm9ybWF0LXRpbWUtc3RyaW5nIGRpc3BsYXkt dGltZS13b3JsZC10aW1lLWZvcm1hdCkpCi0JCSAgcmVzdWx0KQotCSAgICAod2hlbiAoPiB3 aWR0aCBtYXgtd2lkdGgpCi0JICAgICAgKHNldHEgbWF4LXdpZHRoIHdpZHRoKSkpKQotICAg ICAgKHNldGVudiAiVFoiIG9sZC10eikpCisgICAgKGRvbGlzdCAoem9uZSBhbGlzdCkKKyAg ICAgIChsZXQqICgobGFiZWwgKGNhZHIgem9uZSkpCisJICAgICAod2lkdGggKHN0cmluZy13 aWR0aCBsYWJlbCkpKQorCShwdXNoIChjb25zIGxhYmVsCisJCSAgICAoZm9ybWF0LXRpbWUt c3RyaW5nIGRpc3BsYXktdGltZS13b3JsZC10aW1lLWZvcm1hdAorCQkJCQlub3cgKGNhciB6 b25lKSkpCisJICAgICAgcmVzdWx0KQorCSh3aGVuICg+IHdpZHRoIG1heC13aWR0aCkKKwkg IChzZXRxIG1heC13aWR0aCB3aWR0aCkpKSkKICAgICAoc2V0cSBmbXQgKGNvbmNhdCAiJS0i IChpbnQtdG8tc3RyaW5nIG1heC13aWR0aCkgInMgJXNcbiIpKQogICAgIChkb2xpc3QgKHRp bWVkYXRhIChucmV2ZXJzZSByZXN1bHQpKQogICAgICAgKGluc2VydCAoZm9ybWF0IGZtdCAo Y2FyIHRpbWVkYXRhKSAoY2RyIHRpbWVkYXRhKSkpKQpkaWZmIC0tZ2l0IGEvbGlzcC92Yy9h ZGQtbG9nLmVsIGIvbGlzcC92Yy9hZGQtbG9nLmVsCmluZGV4IGViN2U1YmYuLmM5MDQxM2Mg MTAwNjQ0Ci0tLSBhL2xpc3AvdmMvYWRkLWxvZy5lbAorKysgYi9saXNwL3ZjL2FkZC1sb2cu ZWwKQEAgLTU4MSw4ICs1ODEsOCBAQCBJZiB0LCB1c2UgdW5pdmVyc2FsIHRpbWUuIikKIChw dXQgJ2FkZC1sb2ctdGltZS16b25lLXJ1bGUgJ3NhZmUtbG9jYWwtdmFyaWFibGUKICAgICAg KGxhbWJkYSAoeCkgKG9yIChib29sZWFucCB4KSAoc3RyaW5ncCB4KSkpKQogCi0oZGVmdW4g YWRkLWxvZy1pc284NjAxLXRpbWUtem9uZSAoJm9wdGlvbmFsIHRpbWUpCi0gIChsZXQqICgo dXRjLW9mZnNldCAob3IgKGNhciAoY3VycmVudC10aW1lLXpvbmUgdGltZSkpIDApKQorKGRl ZnVuIGFkZC1sb2ctaXNvODYwMS10aW1lLXpvbmUgKCZvcHRpb25hbCB0aW1lIHpvbmUpCisg IChsZXQqICgodXRjLW9mZnNldCAob3IgKGNhciAoY3VycmVudC10aW1lLXpvbmUgdGltZSB6 b25lKSkgMCkpCiAJIChzaWduIChpZiAoPCB1dGMtb2Zmc2V0IDApID8tID8rKSkKIAkgKHNl YyAoYWJzIHV0Yy1vZmZzZXQpKQogCSAoc3MgKCUgc2VjIDYwKSkKQEAgLTU5NiwxMiArNTk2 LDExIEBAIElmIHQsIHVzZSB1bml2ZXJzYWwgdGltZS4iKQogCiAoZGVmdmFyIGFkZC1sb2ct aXNvODYwMS13aXRoLXRpbWUtem9uZSBuaWwpCiAKLShkZWZ1biBhZGQtbG9nLWlzbzg2MDEt dGltZS1zdHJpbmcgKCkKLSAgKGxldCAoKHRpbWUgKGZvcm1hdC10aW1lLXN0cmluZyAiJVkt JW0tJWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsIChlcSB0IGFk ZC1sb2ctdGltZS16b25lLXJ1bGUpKSkpCisoZGVmdW4gYWRkLWxvZy1pc284NjAxLXRpbWUt c3RyaW5nICgmb3B0aW9uYWwgdGltZSB6b25lKQorICAobGV0ICgoZGF0ZSAoZm9ybWF0LXRp bWUtc3RyaW5nICIlWS0lbS0lZCIgdGltZSB6b25lKSkpCiAgICAgKGlmIGFkZC1sb2ctaXNv ODYwMS13aXRoLXRpbWUtem9uZQotICAgICAgICAoY29uY2F0IHRpbWUgIiAiIChhZGQtbG9n LWlzbzg2MDEtdGltZS16b25lKSkKLSAgICAgIHRpbWUpKSkKKyAgICAgICAgKGNvbmNhdCBk YXRlICIgIiAoYWRkLWxvZy1pc284NjAxLXRpbWUtem9uZSB0aW1lIHpvbmUpKQorICAgICAg ZGF0ZSkpKQogCiAoZGVmdW4gY2hhbmdlLWxvZy1uYW1lICgpCiAgICJSZXR1cm4gKHN5c3Rl bS1kZXBlbmRlbnQpIGRlZmF1bHQgbmFtZSBmb3IgYSBjaGFuZ2UgbG9nIGZpbGUuIgpAQCAt ODQ4LDE0ICs4NDcsOCBAQCBub24tbmlsLCBvdGhlcndpc2UgaW4gbG9jYWwgdGltZS4iCiAg ICAgICAobGV0ICgobmV3LWVudHJpZXMKICAgICAgICAgICAgICAobWFwY2FyIChsYW1iZGEg KGFkZHIpCiAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQKLSAgICAgICAgICAgICAg ICAgICAgICAgIChpZiAoc3RyaW5ncCBhZGQtbG9nLXRpbWUtem9uZS1ydWxlKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsZXQgKCh0eiAoZ2V0ZW52ICJUWiIpKSkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh1bndpbmQtcHJvdGVjdAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChwcm9nbgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHNldGVudiAiVFoiIGFkZC1sb2ctdGltZS16b25lLXJ1bGUpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBhZGQtbG9nLXRpbWUt Zm9ybWF0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldGVudiAiVFoi IHR6KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGFkZC1sb2ctdGlt ZS1mb3JtYXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgYWRkLWxvZy10 aW1lLWZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsIGFkZC1s b2ctdGltZS16b25lLXJ1bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAiICAiIGZ1bGwt bmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgIiAgPCIgYWRkciAiPiIpKQogICAgICAg ICAgICAgICAgICAgICAgKGlmIChjb25zcCBtYWlsaW5nLWFkZHJlc3MpCmRpZmYgLS1naXQg YS9saXNwL3ZjL2xvZy1lZGl0LmVsIGIvbGlzcC92Yy9sb2ctZWRpdC5lbAppbmRleCBkNTk1 NDk3Li5hY2JkOWMwIDEwMDY0NAotLS0gYS9saXNwL3ZjL2xvZy1lZGl0LmVsCisrKyBiL2xp c3AvdmMvbG9nLWVkaXQuZWwKQEAgLTg3Miw3ICs4NzIsOCBAQCBSZXR1cm4gbm9uLW5pbCBp ZiBpdCBpcy4iCiAJCSAgKGFuZCAoYm91bmRwICd1c2VyLW1haWwtYWRkcmVzcykgdXNlci1t YWlsLWFkZHJlc3MpKSkKIAkodGltZSAob3IgKGFuZCAoYm91bmRwICdhZGQtbG9nLXRpbWUt Zm9ybWF0KQogCQkgICAgICAgKGZ1bmN0aW9ucCBhZGQtbG9nLXRpbWUtZm9ybWF0KQotCQkg ICAgICAgKGZ1bmNhbGwgYWRkLWxvZy10aW1lLWZvcm1hdCkpCisJCSAgICAgICAoZnVuY2Fs bCBhZGQtbG9nLXRpbWUtZm9ybWF0CisJCQkJbmlsIGFkZC1sb2ctdGltZS16b25lLXJ1bGUp KQogCQkgIChmb3JtYXQtdGltZS1zdHJpbmcgIiVZLSVtLSVkIikpKSkKICAgICAoaWYgKG51 bGwgbG9nLWVkaXQtY2hhbmdlbG9nLXVzZS1maXJzdCkKICAgICAgICAgKGxvb2tpbmctYXQg KHJlZ2V4cC1xdW90ZSAoZm9ybWF0ICIlcyAgJXMgIDwlcz4iIHRpbWUgbmFtZSBtYWlsKSkp CmRpZmYgLS1naXQgYS9tNC9nbnVsaWItY29tcC5tNCBiL200L2dudWxpYi1jb21wLm00Cmlu ZGV4IDA0MjVkMDIuLmNmNzFkN2UgMTAwNjQ0Ci0tLSBhL200L2dudWxpYi1jb21wLm00Cisr KyBiL200L2dudWxpYi1jb21wLm00CkBAIC05OCw2ICs5OCw3IEBAIEFDX0RFRlVOKFtnbF9F QVJMWV0sCiAgICMgQ29kZSBmcm9tIG1vZHVsZSBtZW1yY2hyOgogICAjIENvZGUgZnJvbSBt b2R1bGUgbWtvc3RlbXA6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBta3RpbWU6CisgICMgQ29k ZSBmcm9tIG1vZHVsZSBta3RpbWUtaW50ZXJuYWw6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBt dWx0aWFyY2g6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBub2NyYXNoOgogICAjIENvZGUgZnJv bSBtb2R1bGUgb3BlbmF0LWg6CkBAIC0xNDEsMTMgKzE0MiwxNCBAQCBBQ19ERUZVTihbZ2xf RUFSTFldLAogICAjIENvZGUgZnJvbSBtb2R1bGUgdGVtcG5hbWU6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSB0aW1lOgogICAjIENvZGUgZnJvbSBtb2R1bGUgdGltZV9yOgorICAjIENvZGUg ZnJvbSBtb2R1bGUgdGltZV9yejoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHRpbWVnbToKICAg IyBDb2RlIGZyb20gbW9kdWxlIHRpbWVyLXRpbWU6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSB0 aW1lc3BlYzoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHRpbWVzcGVjLWFkZDoKICAgIyBDb2Rl IGZyb20gbW9kdWxlIHRpbWVzcGVjLXN1YjoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHU2NDoK ICAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXN0ZDoKLSAgIyBDb2RlIGZyb20gbW9kdWxlIHVu c2V0ZW52OgogICAjIENvZGUgZnJvbSBtb2R1bGUgdXBkYXRlLWNvcHlyaWdodDoKICAgIyBD b2RlIGZyb20gbW9kdWxlIHV0aW1lbnM6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSB2YXJhcnJh eXM6CkBAIC0zODUsMTUgKzM4NywyMCBAQCBBQ19ERUZVTihbZ2xfSU5JVF0sCiAgICAgZ2xf UFJFUkVRX1RJTUVfUgogICBmaQogICBnbF9USU1FX01PRFVMRV9JTkRJQ0FUT1IoW3RpbWVf cl0pCisgIGdsX1RJTUVfUloKKyAgaWYgdGVzdCAiJEhBVkVfVElNRVpPTkVfVCIgPSAwOyB0 aGVuCisgICAgQUNfTElCT0JKKFt0aW1lX3J6XSkKKyAgZmkKKyAgZ2xfVElNRV9NT0RVTEVf SU5ESUNBVE9SKFt0aW1lX3J6XSkKKyAgZ2xfRlVOQ19USU1FR00KKyAgaWYgdGVzdCAkSEFW RV9USU1FR00gPSAwIHx8IHRlc3QgJFJFUExBQ0VfVElNRUdNID0gMTsgdGhlbgorICAgIEFD X0xJQk9CSihbdGltZWdtXSkKKyAgICBnbF9QUkVSRVFfVElNRUdNCisgIGZpCisgIGdsX1RJ TUVfTU9EVUxFX0lORElDQVRPUihbdGltZWdtXSkKICAgZ2xfVElNRVJfVElNRQogICBnbF9U SU1FU1BFQwogICBnbF9VTklTVERfSAotICBnbF9GVU5DX1VOU0VURU5WCi0gIGlmIHRlc3Qg JEhBVkVfVU5TRVRFTlYgPSAwIHx8IHRlc3QgJFJFUExBQ0VfVU5TRVRFTlYgPSAxOyB0aGVu Ci0gICAgQUNfTElCT0JKKFt1bnNldGVudl0pCi0gICAgZ2xfUFJFUkVRX1VOU0VURU5WCi0g IGZpCi0gIGdsX1NURExJQl9NT0RVTEVfSU5ESUNBVE9SKFt1bnNldGVudl0pCiAgIGdsX1VU SU1FTlMKICAgQUNfQ19WQVJBUlJBWVMKICAgZ2xfZ251bGliX2VuYWJsZWRfMjYwOTQxYzBl NWRjNjdlYzllODdkMWZiMzIxYzMwMGI9ZmFsc2UKQEAgLTQwNCw2ICs0MTEsNyBAQCBBQ19E RUZVTihbZ2xfSU5JVF0sCiAgIGdsX2dudWxpYl9lbmFibGVkX2dldGdyb3Vwcz1mYWxzZQog ICBnbF9nbnVsaWJfZW5hYmxlZF9iZTQ1M2NlYzVlZWNmNTczMWEyNzRmMmRlN2YyZGIzNj1m YWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9hOTc4Njg1MGU5OTlhZTY1YTgzNmE2MDQxZThl NWVkMT1mYWxzZQorICBnbF9nbnVsaWJfZW5hYmxlZF81MjY0Mjk0YWEwYTU1NTc1NDFiNTNj OGM3NDFmN2YzMT1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF8wM2UwYWFhZDRjYjg5Y2E3 NTc2NTNiZDM2N2E2Y2NiNz1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9wYXRobWF4PWZh bHNlCiAgIGdsX2dudWxpYl9lbmFibGVkXzYwOTllOTczN2Y3NTdkYjM2YzQ3ZmE5ZDlmMDJl ODhjPWZhbHNlCkBAIC01MDYsNiArNTE0LDE3IEBAIEFDX0RFRlVOKFtnbF9JTklUXSwKICAg ICAgIGZpCiAgICAgZmkKICAgfQorICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfNTI2NDI5NGFh MGE1NTU3NTQxYjUzYzhjNzQxZjdmMzEgKCkKKyAgeworICAgIGlmICEgJGdsX2dudWxpYl9l bmFibGVkXzUyNjQyOTRhYTBhNTU1NzU0MWI1M2M4Yzc0MWY3ZjMxOyB0aGVuCisgICAgICBn bF9GVU5DX01LVElNRV9JTlRFUk5BTAorICAgICAgaWYgdGVzdCAkUkVQTEFDRV9NS1RJTUUg PSAxOyB0aGVuCisgICAgICAgIEFDX0xJQk9CSihbbWt0aW1lXSkKKyAgICAgICAgZ2xfUFJF UkVRX01LVElNRQorICAgICAgZmkKKyAgICAgIGdsX2dudWxpYl9lbmFibGVkXzUyNjQyOTRh YTBhNTU1NzU0MWI1M2M4Yzc0MWY3ZjMxPXRydWUKKyAgICBmaQorICB9CiAgIGZ1bmNfZ2xf Z251bGliX200Y29kZV8wM2UwYWFhZDRjYjg5Y2E3NTc2NTNiZDM2N2E2Y2NiNyAoKQogICB7 CiAgICAgaWYgISAkZ2xfZ251bGliX2VuYWJsZWRfMDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQz NjdhNmNjYjc7IHRoZW4KQEAgLTY1Myw2ICs2NzIsOSBAQCBBQ19ERUZVTihbZ2xfSU5JVF0s CiAgIGlmIHsgdGVzdCAkSEFWRV9ERUNMX1NUUlRPVU1BWCA9IDAgfHwgdGVzdCAkUkVQTEFD RV9TVFJUT1VNQVggPSAxOyB9ICYmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19s b25nX2ludCA9IHllczsgdGhlbgogICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9zdHJ0b3Vs bAogICBmaQorICBpZiB0ZXN0ICRIQVZFX1RJTUVHTSA9IDAgfHwgdGVzdCAkUkVQTEFDRV9U SU1FR00gPSAxOyB0aGVuCisgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlXzUyNjQyOTRhYTBh NTU1NzU0MWI1M2M4Yzc0MWY3ZjMxCisgIGZpCiAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9H TlVMSUJfRU5BQkxFRF9dKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURf MjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGJdLCBbJGdsX2dudWxpYl9lbmFibGVk XzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMyMWMzMDBiXSkKICAgQU1fQ09ORElUSU9OQUwo W2dsX0dOVUxJQl9FTkFCTEVEX2RpcmZkXSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9kaXJmZF0p CkBAIC02NjIsNiArNjg0LDcgQEAgQUNfREVGVU4oW2dsX0lOSVRdLAogICBBTV9DT05ESVRJ T05BTChbZ2xfR05VTElCX0VOQUJMRURfZ2V0Z3JvdXBzXSwgWyRnbF9nbnVsaWJfZW5hYmxl ZF9nZXRncm91cHNdKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfYmU0 NTNjZWM1ZWVjZjU3MzFhMjc0ZjJkZTdmMmRiMzZdLCBbJGdsX2dudWxpYl9lbmFibGVkX2Jl NDUzY2VjNWVlY2Y1NzMxYTI3NGYyZGU3ZjJkYjM2XSkKICAgQU1fQ09ORElUSU9OQUwoW2ds X0dOVUxJQl9FTkFCTEVEX2E5Nzg2ODUwZTk5OWFlNjVhODM2YTYwNDFlOGU1ZWQxXSwgWyRn bF9nbnVsaWJfZW5hYmxlZF9hOTc4Njg1MGU5OTlhZTY1YTgzNmE2MDQxZThlNWVkMV0pCisg IEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF81MjY0Mjk0YWEwYTU1NTc1NDFi NTNjOGM3NDFmN2YzMV0sIFskZ2xfZ251bGliX2VuYWJsZWRfNTI2NDI5NGFhMGE1NTU3NTQx YjUzYzhjNzQxZjdmMzFdKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURf MDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjddLCBbJGdsX2dudWxpYl9lbmFibGVk XzAzZTBhYWFkNGNiODljYTc1NzY1M2JkMzY3YTZjY2I3XSkKICAgQU1fQ09ORElUSU9OQUwo W2dsX0dOVUxJQl9FTkFCTEVEX3BhdGhtYXhdLCBbJGdsX2dudWxpYl9lbmFibGVkX3BhdGht YXhdKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfNjA5OWU5NzM3Zjc1 N2RiMzZjNDdmYTlkOWYwMmU4OGNdLCBbJGdsX2dudWxpYl9lbmFibGVkXzYwOTllOTczN2Y3 NTdkYjM2YzQ3ZmE5ZDlmMDJlODhjXSkKQEAgLTkzOCw2ICs5NjEsOCBAQCBBQ19ERUZVTihb Z2xfRklMRV9MSVNUXSwgWwogICBsaWIvdGVtcG5hbWUuaAogICBsaWIvdGltZS5pbi5oCiAg IGxpYi90aW1lX3IuYworICBsaWIvdGltZV9yei5jCisgIGxpYi90aW1lZ20uYwogICBsaWIv dGltZXNwZWMtYWRkLmMKICAgbGliL3RpbWVzcGVjLXN1Yi5jCiAgIGxpYi90aW1lc3BlYy5j CkBAIC05NDYsNyArOTcxLDYgQEAgQUNfREVGVU4oW2dsX0ZJTEVfTElTVF0sIFsKICAgbGli L3U2NC5oCiAgIGxpYi91bmlzdGQuYwogICBsaWIvdW5pc3RkLmluLmgKLSAgbGliL3Vuc2V0 ZW52LmMKICAgbGliL3V0aW1lbnMuYwogICBsaWIvdXRpbWVucy5oCiAgIGxpYi92ZXJpZnku aApAQCAtMTAxMSw3ICsxMDM1LDYgQEAgQUNfREVGVU4oW2dsX0ZJTEVfTElTVF0sIFsKICAg bTQvcmVhZGxpbmsubTQKICAgbTQvcmVhZGxpbmthdC5tNAogICBtNC9zZWN1cmVfZ2V0ZW52 Lm00Ci0gIG00L3NldGVudi5tNAogICBtNC9zaGExLm00CiAgIG00L3NoYTI1Ni5tNAogICBt NC9zaGE1MTIubTQKQEAgLTEwNDMsNiArMTA2Niw4IEBAIEFDX0RFRlVOKFtnbF9GSUxFX0xJ U1RdLCBbCiAgIG00L3RlbXBuYW1lLm00CiAgIG00L3RpbWVfaC5tNAogICBtNC90aW1lX3Iu bTQKKyAgbTQvdGltZV9yei5tNAorICBtNC90aW1lZ20ubTQKICAgbTQvdGltZXJfdGltZS5t NAogICBtNC90aW1lc3BlYy5tNAogICBtNC90bV9nbXRvZmYubTQKZGlmZiAtLWdpdCBhL200 L3N5c190aW1lX2gubTQgYi9tNC9zeXNfdGltZV9oLm00CmluZGV4IDUwMTMzYjkuLjI4Yzhi MWEgMTAwNjQ0Ci0tLSBhL200L3N5c190aW1lX2gubTQKKysrIGIvbTQvc3lzX3RpbWVfaC5t NApAQCAtMTA1LDYgKzEwNSw3IEBAIEFDX0RFRlVOKFtnbF9IRUFERVJfU1lTX1RJTUVfSF9E RUZBVUxUU10sCiAgIEhBVkVfR0VUVElNRU9GREFZPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZF X0dFVFRJTUVPRkRBWV0pCiAgIEhBVkVfU1RSVUNUX1RJTUVWQUw9MTsgICAgIEFDX1NVQlNU KFtIQVZFX1NUUlVDVF9USU1FVkFMXSkKICAgSEFWRV9TWVNfVElNRV9IPTE7ICAgICAgICAg QUNfU1VCU1QoW0hBVkVfU1lTX1RJTUVfSF0pCisgIEhBVkVfVElNRVpPTkVfVD0wOyAgICAg ICAgIEFDX1NVQlNUKFtIQVZFX1RJTUVaT05FX1RdKQogICBSRVBMQUNFX0dFVFRJTUVPRkRB WT0wOyAgICBBQ19TVUJTVChbUkVQTEFDRV9HRVRUSU1FT0ZEQVldKQogICBSRVBMQUNFX1NU UlVDVF9USU1FVkFMPTA7ICBBQ19TVUJTVChbUkVQTEFDRV9TVFJVQ1RfVElNRVZBTF0pCiBd KQpkaWZmIC0tZ2l0IGEvbTQvdGltZV9oLm00IGIvbTQvdGltZV9oLm00CmluZGV4IGQ5YzQx YTQuLjc1NGI0NjkgMTAwNjQ0Ci0tLSBhL200L3RpbWVfaC5tNAorKysgYi9tNC90aW1lX2gu bTQKQEAgLTEwOSw2ICsxMDksNyBAQCBBQ19ERUZVTihbZ2xfSEVBREVSX1RJTUVfSF9ERUZB VUxUU10sCiAgIEdOVUxJQl9TVFJQVElNRT0wOyAgICAgICAgICAgICAgICAgICAgIEFDX1NV QlNUKFtHTlVMSUJfU1RSUFRJTUVdKQogICBHTlVMSUJfVElNRUdNPTA7ICAgICAgICAgICAg ICAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1RJTUVHTV0pCiAgIEdOVUxJQl9USU1FX1I9 MDsgICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfVElNRV9SXSkKKyAg R05VTElCX1RJTUVfUlo9MDsgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJ Ql9USU1FX1JaXSkKICAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBh bm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KICAgSEFWRV9ERUNMX0xPQ0FMVElNRV9S PTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9MT0NBTFRJTUVfUl0pCiAg IEhBVkVfTkFOT1NMRUVQPTE7ICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZF X05BTk9TTEVFUF0pCmRpZmYgLS1naXQgYS9tNC90aW1lX3J6Lm00IGIvbTQvdGltZV9yei5t NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzFmMmMzCi0tLSAvZGV2 L251bGwKKysrIGIvbTQvdGltZV9yei5tNApAQCAtMCwwICsxLDIxIEBACitkbmwgVGltZSB6 b25lIGZ1bmN0aW9uczogdHphbGxvYywgbG9jYWx0aW1lX3J6LCBldGMuCisKK2RubCBDb3B5 cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhp cyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24K K2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmli dXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFz IHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFdyaXR0ZW4gYnkgUGF1bCBFZ2dl cnQuCisKK0FDX0RFRlVOKFtnbF9USU1FX1JaXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfVVNF X1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgQUNfUkVRVUlSRShbZ2xfSEVBREVSX1NZU19USU1F X0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtBQ19TVFJVQ1RfVElNRVpPTkVdKQorICBB Q19DSEVDS19GVU5DU19PTkNFKFt0enNldF0pCisKKyAgQUNfQ0hFQ0tfVFlQRVMoW3RpbWV6 b25lX3RdLCBbXSwgW10sIFtbI2luY2x1ZGUgPHRpbWUuaD5dXSkKKyAgaWYgdGVzdCAiJGFj X2N2X3R5cGVfdGltZXpvbmVfdCIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1RJTUVaT05FX1Q9 MQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L3RpbWVnbS5tNCBiL200L3RpbWVnbS5tNApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTY4Yjk5Ci0tLSAvZGV2L251 bGwKKysrIGIvbTQvdGltZWdtLm00CkBAIC0wLDAgKzEsMjYgQEAKKyMgdGltZWdtLm00IHNl cmlhbCAxMQorZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOS0yMDE1IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3 YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVk IHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9y IHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVz ZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX1RJTUVHTV0sCitbCisgIEFDX1JFUVVJUkUo W2dsX0hFQURFUl9USU1FX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtnbF9GVU5DX01L VElNRV0pCisgIFJFUExBQ0VfVElNRUdNPTAKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbdGlt ZWdtXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY190aW1lZ20gPSB5ZXM7IHRoZW4KKyAgICBp ZiB0ZXN0ICRnbF9jdl9mdW5jX3dvcmtpbmdfbWt0aW1lID0gbm87IHRoZW4KKyAgICAgICMg QXNzdW1lIHRoYXQgdGltZWdtIGlzIGJ1Z2d5IGlmIG1rdGltZSBpcy4KKyAgICAgIFJFUExB Q0VfVElNRUdNPTEKKyAgICBmaQorICBlbHNlCisgICAgSEFWRV9USU1FR009MAorICBmaQor XSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi90aW1lZ20uYy4KK0FDX0RFRlVOKFtnbF9Q UkVSRVFfVElNRUdNXSwgWworICA6CitdKQpkaWZmIC0tZ2l0IGEvc3JjL2NvbmZfcG9zdC5o IGIvc3JjL2NvbmZfcG9zdC5oCmluZGV4IDFhMDgwZmEuLjc4NWU1ZDcgMTAwNjQ0Ci0tLSBh L3NyYy9jb25mX3Bvc3QuaAorKysgYi9zcmMvY29uZl9wb3N0LmgKQEAgLTIwNiw2ICsyMDYs MTMgQEAgZXh0ZXJuIHZvaWQgX0RlYlByaW50IChjb25zdCBjaGFyICpmbXQsIC4uLik7CiAj ZGVmaW5lIFJFX1RSQU5TTEFURV9QKFRCTCkgKCFFUSAoVEJMLCBtYWtlX251bWJlciAoMCkp KQogI2VuZGlmCiAKKy8qIFRlbGwgdGltZV9yei5jIHRvIHVzZSBFbWFjcydzIGdldHRlciBh bmQgc2V0dGVyIGZvciBUWi4KKyAgIE9ubHkgRW1hY3MgdXNlcyB0aW1lX3J6IHNvIHRoaXMg aXMgT0suICAqLworI2RlZmluZSBnZXRlbnZfVFogZW1hY3NfZ2V0ZW52X1RaCisjZGVmaW5l IHNldGVudl9UWiBlbWFjc19zZXRlbnZfVFoKK2V4dGVybiBjaGFyICplbWFjc19nZXRlbnZf VFogKHZvaWQpOworZXh0ZXJuIGludCBlbWFjc19zZXRlbnZfVFogKGNoYXIgY29uc3QgKik7 CisKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIApkaWZmIC0t Z2l0IGEvc3JjL2VkaXRmbnMuYyBiL3NyYy9lZGl0Zm5zLmMKaW5kZXggZTM5ZWVkNi4uOWZm MzlmOSAxMDA2NDQKLS0tIGEvc3JjL2VkaXRmbnMuYworKysgYi9zcmMvZWRpdGZucy5jCkBA IC00NCw4ICs0NCwxMCBAQCBhbG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAjaW5jbHVkZSA8c3lzL3Jlc291 cmNlLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmxvYXQu aD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KKwogI2luY2x1ZGUgPGludHByb3BzLmg+CiAjaW5j bHVkZSA8c3RyZnRpbWUuaD4KICNpbmNsdWRlIDx2ZXJpZnkuaD4KQEAgLTY1LDkgKzY3LDgg QEAgZXh0ZXJuIExpc3BfT2JqZWN0IHczMl9nZXRfaW50ZXJuYWxfcnVuX3RpbWUgKHZvaWQp OwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgbGlzcF90aW1lIGxpc3BfdGltZV9zdHJ1Y3Qg KExpc3BfT2JqZWN0LCBpbnQgKik7Ci1zdGF0aWMgdm9pZCBzZXRfdGltZV96b25lX3J1bGUg KGNoYXIgY29uc3QgKik7CiBzdGF0aWMgTGlzcF9PYmplY3QgZm9ybWF0X3RpbWVfc3RyaW5n IChjaGFyIGNvbnN0ICosIHB0cmRpZmZfdCwgc3RydWN0IHRpbWVzcGVjLAotCQkJCSAgICAg ICBib29sLCBzdHJ1Y3QgdG0gKik7CisJCQkJICAgICAgIExpc3BfT2JqZWN0LCBzdHJ1Y3Qg dG0gKik7CiBzdGF0aWMgbG9uZyBpbnQgdG1fZ210b2ZmIChzdHJ1Y3QgdG0gKik7CiBzdGF0 aWMgaW50IHRtX2RpZmYgKHN0cnVjdCB0bSAqLCBzdHJ1Y3QgdG0gKik7CiBzdGF0aWMgdm9p ZCB1cGRhdGVfYnVmZmVyX3Byb3BlcnRpZXMgKHB0cmRpZmZfdCwgcHRyZGlmZl90KTsKQEAg LTc2LDggKzc3LDEzIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9idWZmZXJfcHJvcGVydGllcyAo cHRyZGlmZl90LCBwdHJkaWZmX3QpOwogIyBkZWZpbmUgSEFWRV9UTV9HTVRPRkYgZmFsc2UK ICNlbmRpZgogCi0vKiBUaGUgc3RhcnR1cCB2YWx1ZSBvZiB0aGUgVFogZW52aXJvbm1lbnQg dmFyaWFibGU7IG51bGwgaWYgdW5zZXQuICAqLwotc3RhdGljIGNoYXIgY29uc3QgKmluaXRp YWxfdHo7CitlbnVtIHsgdHplcWxlbiA9IHNpemVvZiAiVFo9IiAtIDEgfTsKKworLyogVGlt ZSB6b25lcyBlcXVpdmFsZW50IHRvIGN1cnJlbnQgbG9jYWwgdGltZSwgdG8gd2FsbCBjbG9j ayB0aW1lLAorICAgYW5kIHRvIFVUQywgcmVzcGVjdGl2ZWx5LiAgKi8KK3N0YXRpYyB0aW1l em9uZV90IGxvY2FsX3R6Oworc3RhdGljIHRpbWV6b25lX3Qgd2FsbF9jbG9ja190ejsKK3N0 YXRpYyB0aW1lem9uZV90IGNvbnN0IHV0Y190eiA9IDA7CiAKIC8qIEEgdmFsaWQgYnV0IHVu bGlrZWx5IHNldHRpbmcgZm9yIHRoZSBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICAgIEl0 IGlzIE9LICh0aG91Z2ggYSBiaXQgc2xvd2VyKSBpZiB0aGUgdXNlciBjaG9vc2VzIHRoaXMg dmFsdWUuICAqLwpAQCAtOTQsOCArMTAwLDk3IEBAIGluaXRfYW5kX2NhY2hlX3N5c3RlbV9u YW1lICh2b2lkKQogICBjYWNoZWRfc3lzdGVtX25hbWUgPSBWc3lzdGVtX25hbWU7CiB9CiAK K3N0YXRpYyBzdHJ1Y3QgdG0gKgorZW1hY3NfbG9jYWx0aW1lX3J6ICh0aW1lem9uZV90IHR6 LCB0aW1lX3QgY29uc3QgKnQsIHN0cnVjdCB0bSAqdG0pCit7CisgIHRtID0gbG9jYWx0aW1l X3J6ICh0eiwgdCwgdG0pOworICBpZiAoIXRtICYmIGVycm5vID09IEVOT01FTSkKKyAgICBt ZW1vcnlfZnVsbCAoU0laRV9NQVgpOworICByZXR1cm4gdG07Cit9CisKK3N0YXRpYyB0aW1l X3QKK2VtYWNzX21rdGltZV96ICh0aW1lem9uZV90IHR6LCBzdHJ1Y3QgdG0gKnRtKQorewor ICBlcnJubyA9IDA7CisgIHRpbWVfdCB0ID0gbWt0aW1lX3ogKHR6LCB0bSk7CisgIGlmICh0 ID09ICh0aW1lX3QpIC0xICYmIGVycm5vID09IEVOT01FTSkKKyAgICBtZW1vcnlfZnVsbCAo U0laRV9NQVgpOworICByZXR1cm4gdDsKK30KKworLyogQWxsb2NhdGUgYSB0aW1lem9uZSwg c2lnbmFsaW5nIG9uIGZhaWx1cmUuICAqLworc3RhdGljIHRpbWV6b25lX3QKK3h0emFsbG9j IChjaGFyIGNvbnN0ICpuYW1lKQoreworICB0aW1lem9uZV90IHR6ID0gdHphbGxvYyAobmFt ZSk7CisgIGlmICghdHopCisgICAgbWVtb3J5X2Z1bGwgKFNJWkVfTUFYKTsKKyAgcmV0dXJu IHR6OworfQorCisvKiBGcmVlIGEgdGltZXpvbmUsIGV4Y2VwdCBkbyBub3QgZnJlZSB0aGUg dGltZSB6b25lIGZvciBsb2NhbCB0aW1lLgorICAgRnJlZWluZyB1dGNfdHogaXMgYWxzbyBh IG5vLW9wLiAgKi8KK3N0YXRpYyB2b2lkCit4dHpmcmVlICh0aW1lem9uZV90IHR6KQorewor ICBpZiAodHogIT0gbG9jYWxfdHopCisgICAgdHpmcmVlICh0eik7Cit9CisKKy8qIENvbnZl cnQgdGhlIExpc3AgdGltZSB6b25lIHJ1bGUgWk9ORSB0byBhIHRpbWV6b25lX3Qgb2JqZWN0 LgorICAgVGhlIHJldHVybmVkIHZhbHVlIGVpdGhlciBpcyAwLCBvciBpcyBMT0NBTF9UWiwg b3IgaXMgbmV3bHkgYWxsb2NhdGVkLgorICAgSWYgU0VUVFosIHNldCBFbWFjcyBsb2NhbCB0 aW1lIHRvIHRoZSB0aW1lIHpvbmUgcnVsZTsgb3RoZXJ3aXNlLAorICAgdGhlIGNhbGxlciBz aG91bGQgZXZlbnR1YWxseSBwYXNzIHRoZSByZXR1cm5lZCB2YWx1ZSB0byB4dHpmcmVlLiAg Ki8KK3N0YXRpYyB0aW1lem9uZV90Cit0emxvb2t1cCAoTGlzcF9PYmplY3Qgem9uZSwgYm9v bCBzZXR0eikKK3sKKyAgc3RhdGljIGNoYXIgY29uc3QgdHpidWZfZm9ybWF0W10gPSAiWFhY JXMlInBJImQ6JTAyZDolMDJkIjsKKyAgY2hhciB0emJ1ZltzaXplb2YgdHpidWZfZm9ybWF0 ICsgSU5UX1NUUkxFTl9CT1VORCAoRU1BQ1NfSU5UKV07CisgIGNoYXIgY29uc3QgKnpvbmVf c3RyaW5nOworICB0aW1lem9uZV90IG5ld190ejsKKworICBpZiAoTklMUCAoem9uZSkpCisg ICAgcmV0dXJuIGxvY2FsX3R6OworICBlbHNlIGlmIChFUSAoem9uZSwgUXQpKQorICAgIHsK KyAgICAgIHpvbmVfc3RyaW5nID0gIlVUQzAiOworICAgICAgbmV3X3R6ID0gdXRjX3R6Owor ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChFUSAoem9uZSwgUXdhbGwpKQorCXpv bmVfc3RyaW5nID0gMDsKKyAgICAgIGVsc2UgaWYgKFNUUklOR1AgKHpvbmUpKQorCXpvbmVf c3RyaW5nID0gU1NEQVRBICh6b25lKTsKKyAgICAgIGVsc2UgaWYgKElOVEVHRVJQICh6b25l KSkKKwl7CisJICBFTUFDU19JTlQgYWJzem9uZSA9IGVhYnMgKFhJTlQgKHpvbmUpKSwgaG91 ciA9IGFic3pvbmUgLyAoNjAgKiA2MCk7CisJICBpbnQgbWluID0gKGFic3pvbmUgLyA2MCkg JSA2MCwgc2VjID0gYWJzem9uZSAlIDYwOworCSAgc3ByaW50ZiAodHpidWYsIHR6YnVmX2Zv cm1hdCwgJiItIltYSU5UICh6b25lKSA8IDBdLCBob3VyLCBtaW4sIHNlYyk7CisJICB6b25l X3N0cmluZyA9IHR6YnVmOworCX0KKyAgICAgIGVsc2UKKwl4c2lnbmFsMiAoUWVycm9yLCBi dWlsZF9zdHJpbmcgKCJJbnZhbGlkIHRpbWUgem9uZSBzcGVjaWZpY2F0aW9uIiksCisJCSAg em9uZSk7CisgICAgICBuZXdfdHogPSB4dHphbGxvYyAoem9uZV9zdHJpbmcpOworICAgIH0K KworICBpZiAoc2V0dHopCisgICAgeworICAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAgICBl bWFjc19zZXRlbnZfVFogKHpvbmVfc3RyaW5nKTsKKyAgICAgIHRpbWV6b25lX3Qgb2xkX3R6 ID0gbG9jYWxfdHo7CisgICAgICBsb2NhbF90eiA9IG5ld190ejsKKyAgICAgIHR6ZnJlZSAo b2xkX3R6KTsKKyAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgfQorCisgIHJldHVybiBu ZXdfdHo7Cit9CisKIHZvaWQKLWluaXRfZWRpdGZucyAodm9pZCkKK2luaXRfZWRpdGZucyAo Ym9vbCBkdW1waW5nKQogewogICBjb25zdCBjaGFyICp1c2VyX25hbWU7CiAgIHJlZ2lzdGVy IGNoYXIgKnA7CkBAIC0xMDgsNyArMjAzLDcgQEAgaW5pdF9lZGl0Zm5zICh2b2lkKQogI2lm bmRlZiBDQU5OT1RfRFVNUAogICAvKiBXaGVuIGp1c3QgZHVtcGluZyBvdXQsIHNldCB0aGUg dGltZSB6b25lIHRvIGEga25vd24gdW5saWtlbHkgdmFsdWUKICAgICAgYW5kIHNraXAgdGhl IHJlc3Qgb2YgdGhpcyBmdW5jdGlvbi4gICovCi0gIGlmICghaW5pdGlhbGl6ZWQpCisgIGlm IChkdW1waW5nKQogICAgIHsKICMgaWZkZWYgSEFWRV9UWlNFVAogICAgICAgeHB1dGVudiAo ZHVtcF90el9zdHJpbmcpOwpAQCAtMTE5LDcgKzIxNCw2IEBAIGluaXRfZWRpdGZucyAodm9p ZCkKICNlbmRpZgogCiAgIGNoYXIgKnR6ID0gZ2V0ZW52ICgiVFoiKTsKLSAgaW5pdGlhbF90 eiA9IHR6OwogCiAjaWYgIWRlZmluZWQgQ0FOTk9UX0RVTVAgJiYgZGVmaW5lZCBIQVZFX1Ra U0VUCiAgIC8qIElmIHRoZSBleGVjdXRpb24gVFogaGFwcGVucyB0byBiZSB0aGUgc2FtZSBh cyB0aGUgZHVtcCBUWiwKQEAgLTEyNyw3ICsyMjEsNyBAQCBpbml0X2VkaXRmbnMgKHZvaWQp CiAgICAgIHRvIGZvcmNlIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIHRvIHJlbG9h ZCB0aGUgVFogaW5mby4KICAgICAgVGhpcyBpcyBuZWVkZWQgb24gaW1wbGVtZW50YXRpb25z IHRoYXQgbG9hZCBUWiBpbmZvIGZyb20gZmlsZXMsCiAgICAgIHNpbmNlIHRoZSBUWiBmaWxl IGNvbnRlbnRzIG1heSBkaWZmZXIgYmV0d2VlbiBkdW1wIGFuZCBleGVjdXRpb24uICAqLwot ICBpZiAodHogJiYgc3RyY21wICh0eiwgJmR1bXBfdHpfc3RyaW5nW3NpemVvZiAiVFo9IiAt IDFdKSA9PSAwKQorICBpZiAodHogJiYgc3RyY21wICh0eiwgJmR1bXBfdHpfc3RyaW5nW3R6 ZXFsZW5dKSA9PSAwKQogICAgIHsKICAgICAgICsrKnR6OwogICAgICAgdHpzZXQgKCk7CkBA IC0xMzUsOSArMjI5LDEwIEBAIGluaXRfZWRpdGZucyAodm9pZCkKICAgICB9CiAjZW5kaWYK IAotICAvKiBDYWxsIHNldF90aW1lX3pvbmVfcnVsZSBub3csIHNvIHRoYXQgaXRzIGNhbGwg dG8gcHV0ZW52IGlzIGRvbmUKKyAgLyogU2V0IHRoZSB0aW1lIHpvbmUgcnVsZSBub3csIHNv IHRoYXQgdGhlIGNhbGwgdG8gcHV0ZW52IGlzIGRvbmUKICAgICAgYmVmb3JlIG11bHRpcGxl IHRocmVhZHMgYXJlIGFjdGl2ZS4gICovCi0gIHNldF90aW1lX3pvbmVfcnVsZSAodHopOwor ICB3YWxsX2Nsb2NrX3R6ID0geHR6YWxsb2MgKDApOworICB0emxvb2t1cCAodHogPyBidWls ZF9zdHJpbmcgKHR6KSA6IFF3YWxsLCB0cnVlKTsKIAogICBwdyA9IGdldHB3dWlkIChnZXR1 aWQgKCkpOwogI2lmZGVmIE1TRE9TCkBAIC0xMjA2LDcgKzEzMDEsNyBAQCBvZiB0aGUgdXNl ciB3aXRoIHRoYXQgdWlkLCBvciBuaWwgaWYgdGhlcmUgaXMgbm8gc3VjaCB1c2VyLiAgKi8p CiAgICAgIChUaGF0IGNhbiBoYXBwZW4gaWYgRW1hY3MgaXMgZHVtcGFibGUKICAgICAgYnV0 IHlvdSBkZWNpZGUgdG8gcnVuIGB0ZW1hY3MgLWwgbG9hZHVwJyBhbmQgbm90IGR1bXAuICAq LwogICBpZiAoTklMUCAoVnVzZXJfbG9naW5fbmFtZSkpCi0gICAgaW5pdF9lZGl0Zm5zICgp OworICAgIGluaXRfZWRpdGZucyAoZmFsc2UpOwogCiAgIGlmIChOSUxQICh1aWQpKQogICAg IHJldHVybiBWdXNlcl9sb2dpbl9uYW1lOwpAQCAtMTIyOSw3ICsxMzI0LDcgQEAgVGhpcyBp Z25vcmVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTE9HTkFNRSBhbmQgVVNFUiwgc28g aXQgZGlmZmVycyBmcm9tCiAgICAgIChUaGF0IGNhbiBoYXBwZW4gaWYgRW1hY3MgaXMgZHVt cGFibGUKICAgICAgYnV0IHlvdSBkZWNpZGUgdG8gcnVuIGB0ZW1hY3MgLWwgbG9hZHVwJyBh bmQgbm90IGR1bXAuICAqLwogICBpZiAoTklMUCAoVnVzZXJfbG9naW5fbmFtZSkpCi0gICAg aW5pdF9lZGl0Zm5zICgpOworICAgIGluaXRfZWRpdGZucyAoZmFsc2UpOwogICByZXR1cm4g VnVzZXJfcmVhbF9sb2dpbl9uYW1lOwogfQogCkBAIC0xMzg0LDMwICsxNDc5LDYgQEAgY2hl Y2tfdGltZV92YWxpZGl0eSAoaW50IHZhbGlkaXR5KQogICAgIH0KIH0KIAotLyogQSBzdWJz dGl0dXRlIGZvciBta3RpbWVfeiBvbiBwbGF0Zm9ybXMgdGhhdCBsYWNrIGl0LiAgSXQncyBu b3QKLSAgIHRocmVhZC1zYWZlLCBidXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBFbWFj cyBpbiB0eXBpY2FsIHVzZS4gICovCi0jaWZuZGVmIEhBVkVfVFpBTExPQwotc3RhdGljIHRp bWVfdAotbWt0aW1lX3ogKHRpbWV6b25lX3QgdHosIHN0cnVjdCB0bSAqdG0pCi17Ci0gIGNo YXIgKm9sZHR6ID0gZ2V0ZW52ICgiVFoiKTsKLSAgVVNFX1NBRkVfQUxMT0NBOwotICBpZiAo b2xkdHopCi0gICAgewotICAgICAgc2l6ZV90IG9sZHR6c2l6ZSA9IHN0cmxlbiAob2xkdHop ICsgMTsKLSAgICAgIGNoYXIgKm9sZHR6Y29weSA9IFNBRkVfQUxMT0NBIChvbGR0enNpemUp OwotICAgICAgb2xkdHogPSBzdHJjcHkgKG9sZHR6Y29weSwgb2xkdHopOwotICAgIH0KLSAg YmxvY2tfaW5wdXQgKCk7Ci0gIHNldF90aW1lX3pvbmVfcnVsZSAodHopOwotICB0aW1lX3Qg dCA9IG1rdGltZSAodG0pOwotICBzZXRfdGltZV96b25lX3J1bGUgKG9sZHR6KTsKLSAgdW5i bG9ja19pbnB1dCAoKTsKLSAgU0FGRV9GUkVFICgpOwotICByZXR1cm4gdDsKLX0KLSNlbmRp ZgotCiAvKiBSZXR1cm4gdGhlIHVwcGVyIHBhcnQgb2YgdGhlIHRpbWUgVCAoZXZlcnl0aGlu ZyBidXQgdGhlIGJvdHRvbSAxNiBiaXRzKS4gICovCiBzdGF0aWMgRU1BQ1NfSU5UCiBoaV90 aW1lICh0aW1lX3QgdCkKQEAgLTE4NDgsNyArMTkxOSw3IEBAIG9yIChpZiB5b3UgbmVlZCB0 aW1lIGFzIGEgc3RyaW5nKSBgZm9ybWF0LXRpbWUtc3RyaW5nJy4gICovKQogCiAvKiBXcml0 ZSBpbmZvcm1hdGlvbiBpbnRvIGJ1ZmZlciBTIG9mIHNpemUgTUFYU0laRSwgYWNjb3JkaW5n IHRvIHRoZQogICAgRk9STUFUIG9mIGxlbmd0aCBGT1JNQVRfTEVOLCB1c2luZyB0aW1lIGlu Zm9ybWF0aW9uIHRha2VuIGZyb20gKlRQLgotICAgRGVmYXVsdCB0byBVbml2ZXJzYWwgVGlt ZSBpZiBVVCwgbG9jYWwgdGltZSBvdGhlcndpc2UuCisgICBVc2UgdGhlIHRpbWUgem9uZSBz cGVjaWZpZWQgYnkgVFouCiAgICBVc2UgTlMgYXMgdGhlIG51bWJlciBvZiBuYW5vc2Vjb25k cyBpbiB0aGUgJU4gZGlyZWN0aXZlLgogICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMg d3JpdHRlbiwgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcKICAgICdcMCcuICBJZiBT IGlzIE5VTEwsIG5vdGhpbmcgd2lsbCBiZSB3cml0dGVuIGFueXdoZXJlOyBzbyB0bwpAQCAt MTg1OSw3ICsxOTMwLDcgQEAgb3IgKGlmIHlvdSBuZWVkIHRpbWUgYXMgYSBzdHJpbmcpIGBm b3JtYXQtdGltZS1zdHJpbmcnLiAgKi8pCiAgICBieXRlcyBpbiBGT1JNQVQgYW5kIGl0IGRv ZXMgbm90IHN1cHBvcnQgbmFub3NlY29uZHMuICAqLwogc3RhdGljIHNpemVfdAogZW1hY3Nf bm1lbWZ0aW1lIChjaGFyICpzLCBzaXplX3QgbWF4c2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0 LAotCQkgc2l6ZV90IGZvcm1hdF9sZW4sIGNvbnN0IHN0cnVjdCB0bSAqdHAsIGJvb2wgdXQs IGludCBucykKKwkJIHNpemVfdCBmb3JtYXRfbGVuLCBjb25zdCBzdHJ1Y3QgdG0gKnRwLCB0 aW1lem9uZV90IHR6LCBpbnQgbnMpCiB7CiAgIHNpemVfdCB0b3RhbCA9IDA7CiAKQEAgLTE4 NzYsNyArMTk0Nyw3IEBAIGVtYWNzX25tZW1mdGltZSAoY2hhciAqcywgc2l6ZV90IG1heHNp emUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKICAgICAgIGlmIChzKQogCXNbMF0gPSAnXDEnOwog Ci0gICAgICByZXN1bHQgPSBuc3RyZnRpbWUgKHMsIG1heHNpemUsIGZvcm1hdCwgdHAsIHV0 LCBucyk7CisgICAgICByZXN1bHQgPSBuc3RyZnRpbWUgKHMsIG1heHNpemUsIGZvcm1hdCwg dHAsIHR6LCBucyk7CiAKICAgICAgIGlmIChzKQogCXsKQEAgLTE5MDEsOCArMTk3Miw5IEBA IERFRlVOICgiZm9ybWF0LXRpbWUtc3RyaW5nIiwgRmZvcm1hdF90aW1lX3N0cmluZywgU2Zv cm1hdF90aW1lX3N0cmluZywgMSwgMywgMCwKIFRJTUUgaXMgc3BlY2lmaWVkIGFzIChISUdI IExPVyBVU0VDIFBTRUMpLCBhcyByZXR1cm5lZCBieQogYGN1cnJlbnQtdGltZScgb3IgYGZp bGUtYXR0cmlidXRlcycuICBUaGUgb2Jzb2xldGUgZm9ybSAoSElHSCAuIExPVykKIGlzIGFs c28gc3RpbGwgYWNjZXB0ZWQuCi1UaGUgdGhpcmQsIG9wdGlvbmFsLCBhcmd1bWVudCBVTklW RVJTQUwsIGlmIG5vbi1uaWwsIG1lYW5zIGRlc2NyaWJlIFRJTUUKLWFzIFVuaXZlcnNhbCBU aW1lOyBuaWwgbWVhbnMgZGVzY3JpYmUgVElNRSBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgor VGhlIG9wdGlvbmFsIFpPTkUgaXMgb21pdHRlZCBvciBuaWwgZm9yIEVtYWNzIGxvY2FsIHRp bWUsIHQgZm9yCitVbml2ZXJzYWwgVGltZSwgYHdhbGwnIGZvciBzeXN0ZW0gd2FsbCBjbG9j ayB0aW1lLCBvciBhIHN0cmluZyBhcyBpbgorYHNldC10aW1lLXpvbmUtcnVsZScgZm9yIGEg dGltZSB6b25lIHJ1bGUuCiBUaGUgdmFsdWUgaXMgYSBjb3B5IG9mIEZPUk1BVC1TVFJJTkcs IGJ1dCB3aXRoIGNlcnRhaW4gY29uc3RydWN0cyByZXBsYWNlZAogYnkgdGV4dCB0aGF0IGRl c2NyaWJlcyB0aGUgc3BlY2lmaWVkIGRhdGUgYW5kIHRpbWUgaW4gVElNRToKIApAQCAtMTk1 MSw4ICsyMDIzLDggQEAgVGhlIG1vZGlmaWVycyBhcmUgYEUnIGFuZCBgTycuICBGb3IgY2Vy dGFpbiBjaGFyYWN0ZXJzIFgsCiAKIEZvciBleGFtcGxlLCB0byBwcm9kdWNlIGZ1bGwgSVNP IDg2MDEgZm9ybWF0LCB1c2UgIiVGVCVUJXoiLgogCi11c2FnZTogKGZvcm1hdC10aW1lLXN0 cmluZyBGT1JNQVQtU1RSSU5HICZvcHRpb25hbCBUSU1FIFVOSVZFUlNBTCkgICovKQotICAo TGlzcF9PYmplY3QgZm9ybWF0X3N0cmluZywgTGlzcF9PYmplY3QgdGltZXZhbCwgTGlzcF9P YmplY3QgdW5pdmVyc2FsKQordXNhZ2U6IChmb3JtYXQtdGltZS1zdHJpbmcgRk9STUFULVNU UklORyAmb3B0aW9uYWwgVElNRSBaT05FKSAgKi8pCisgIChMaXNwX09iamVjdCBmb3JtYXRf c3RyaW5nLCBMaXNwX09iamVjdCB0aW1ldmFsLCBMaXNwX09iamVjdCB6b25lKQogewogICBz dHJ1Y3QgdGltZXNwZWMgdCA9IGxpc3BfdGltZV9hcmd1bWVudCAodGltZXZhbCk7CiAgIHN0 cnVjdCB0bSB0bTsKQEAgLTE5NjEsMTIgKzIwMzMsMTIgQEAgdXNhZ2U6IChmb3JtYXQtdGlt ZS1zdHJpbmcgRk9STUFULVNUUklORyAmb3B0aW9uYWwgVElNRSBVTklWRVJTQUwpICAqLykK ICAgZm9ybWF0X3N0cmluZyA9IGNvZGVfY29udmVydF9zdHJpbmdfbm9yZWNvcmQgKGZvcm1h dF9zdHJpbmcsCiAJCQkJCQlWbG9jYWxlX2NvZGluZ19zeXN0ZW0sIDEpOwogICByZXR1cm4g Zm9ybWF0X3RpbWVfc3RyaW5nIChTU0RBVEEgKGZvcm1hdF9zdHJpbmcpLCBTQllURVMgKGZv cm1hdF9zdHJpbmcpLAotCQkJICAgICB0LCAhIE5JTFAgKHVuaXZlcnNhbCksICZ0bSk7CisJ CQkgICAgIHQsIHpvbmUsICZ0bSk7CiB9CiAKIHN0YXRpYyBMaXNwX09iamVjdAogZm9ybWF0 X3RpbWVfc3RyaW5nIChjaGFyIGNvbnN0ICpmb3JtYXQsIHB0cmRpZmZfdCBmb3JtYXRsZW4s Ci0JCSAgICBzdHJ1Y3QgdGltZXNwZWMgdCwgYm9vbCB1dCwgc3RydWN0IHRtICp0bXApCisJ CSAgICBzdHJ1Y3QgdGltZXNwZWMgdCwgTGlzcF9PYmplY3Qgem9uZSwgc3RydWN0IHRtICp0 bXApCiB7CiAgIGNoYXIgYnVmZmVyWzQwMDBdOwogICBjaGFyICpidWYgPSBidWZmZXI7CkBA IC0xOTc2LDM2ICsyMDQ4LDQ4IEBAIGZvcm1hdF90aW1lX3N0cmluZyAoY2hhciBjb25zdCAq Zm9ybWF0LCBwdHJkaWZmX3QgZm9ybWF0bGVuLAogICBpbnQgbnMgPSB0LnR2X25zZWM7CiAg IFVTRV9TQUZFX0FMTE9DQTsKIAotICB0bXAgPSB1dCA/IGdtdGltZV9yICgmdC50dl9zZWMs IHRtcCkgOiBsb2NhbHRpbWVfciAoJnQudHZfc2VjLCB0bXApOworICB0aW1lem9uZV90IHR6 ID0gdHpsb29rdXAgKHpvbmUsIGZhbHNlKTsKKyAgdG1wID0gZW1hY3NfbG9jYWx0aW1lX3J6 ICh0eiwgJnQudHZfc2VjLCB0bXApOwogICBpZiAoISB0bXApCi0gICAgdGltZV9vdmVyZmxv dyAoKTsKKyAgICB7CisgICAgICB4dHpmcmVlICh0eik7CisgICAgICB0aW1lX292ZXJmbG93 ICgpOworICAgIH0KICAgc3luY2hyb25pemVfc3lzdGVtX3RpbWVfbG9jYWxlICgpOwogCiAg IHdoaWxlICh0cnVlKQogICAgIHsKICAgICAgIGJ1ZlswXSA9ICdcMSc7Ci0gICAgICBsZW4g PSBlbWFjc19ubWVtZnRpbWUgKGJ1Ziwgc2l6ZSwgZm9ybWF0LCBmb3JtYXRsZW4sIHRtcCwg dXQsIG5zKTsKKyAgICAgIGxlbiA9IGVtYWNzX25tZW1mdGltZSAoYnVmLCBzaXplLCBmb3Jt YXQsIGZvcm1hdGxlbiwgdG1wLCB0eiwgbnMpOwogICAgICAgaWYgKCgwIDwgbGVuICYmIGxl biA8IHNpemUpIHx8IChsZW4gPT0gMCAmJiBidWZbMF0gPT0gJ1wwJykpCiAJYnJlYWs7CiAK ICAgICAgIC8qIEJ1ZmZlciB3YXMgdG9vIHNtYWxsLCBzbyBtYWtlIGl0IGJpZ2dlciBhbmQg dHJ5IGFnYWluLiAgKi8KLSAgICAgIGxlbiA9IGVtYWNzX25tZW1mdGltZSAoTlVMTCwgU0la RV9NQVgsIGZvcm1hdCwgZm9ybWF0bGVuLCB0bXAsIHV0LCBucyk7CisgICAgICBsZW4gPSBl bWFjc19ubWVtZnRpbWUgKE5VTEwsIFNJWkVfTUFYLCBmb3JtYXQsIGZvcm1hdGxlbiwgdG1w LCB0eiwgbnMpOwogICAgICAgaWYgKFNUUklOR19CWVRFU19CT1VORCA8PSBsZW4pCi0Jc3Ry aW5nX292ZXJmbG93ICgpOworCXsKKwkgIHh0emZyZWUgKHR6KTsKKwkgIHN0cmluZ19vdmVy ZmxvdyAoKTsKKwl9CiAgICAgICBzaXplID0gbGVuICsgMTsKICAgICAgIGJ1ZiA9IFNBRkVf QUxMT0NBIChzaXplKTsKICAgICB9CiAKKyAgeHR6ZnJlZSAodHopOwogICBidWZzdHJpbmcg PSBtYWtlX3VuaWJ5dGVfc3RyaW5nIChidWYsIGxlbik7CiAgIFNBRkVfRlJFRSAoKTsKICAg cmV0dXJuIGNvZGVfY29udmVydF9zdHJpbmdfbm9yZWNvcmQgKGJ1ZnN0cmluZywgVmxvY2Fs ZV9jb2Rpbmdfc3lzdGVtLCAwKTsKIH0KIAotREVGVU4gKCJkZWNvZGUtdGltZSIsIEZkZWNv ZGVfdGltZSwgU2RlY29kZV90aW1lLCAwLCAxLCAwLAotICAgICAgIGRvYzogLyogRGVjb2Rl IGEgdGltZSB2YWx1ZSBhcyAoU0VDIE1JTlVURSBIT1VSIERBWSBNT05USCBZRUFSIERPVyBE U1QgWk9ORSkuCitERUZVTiAoImRlY29kZS10aW1lIiwgRmRlY29kZV90aW1lLCBTZGVjb2Rl X3RpbWUsIDAsIDIsIDAsCisgICAgICAgZG9jOiAvKiBEZWNvZGUgYSB0aW1lIHZhbHVlIGFz IChTRUMgTUlOVVRFIEhPVVIgREFZIE1PTlRIIFlFQVIgRE9XIERTVCBVVENPRkYpLgogVGhl IG9wdGlvbmFsIFNQRUNJRklFRC1USU1FIHNob3VsZCBiZSBhIGxpc3Qgb2YgKEhJR0ggTE9X IC4gSUdOT1JFRCksCiBhcyBmcm9tIGBjdXJyZW50LXRpbWUnIGFuZCBgZmlsZS1hdHRyaWJ1 dGVzJywgb3IgbmlsIHRvIHVzZSB0aGUKIGN1cnJlbnQgdGltZS4gIFRoZSBvYnNvbGV0ZSBm b3JtIChISUdIIC4gTE9XKSBpcyBhbHNvIHN0aWxsIGFjY2VwdGVkLgorVGhlIG9wdGlvbmFs IFpPTkUgaXMgb21pdHRlZCBvciBuaWwgZm9yIEVtYWNzIGxvY2FsIHRpbWUsIHQgZm9yCitV bml2ZXJzYWwgVGltZSwgYHdhbGwnIGZvciBzeXN0ZW0gd2FsbCBjbG9jayB0aW1lLCBvciBh IHN0cmluZyBhcyBpbgorYHNldC10aW1lLXpvbmUtcnVsZScgZm9yIGEgdGltZSB6b25lIHJ1 bGUuCisKIFRoZSBsaXN0IGhhcyB0aGUgZm9sbG93aW5nIG5pbmUgbWVtYmVyczogU0VDIGlz IGFuIGludGVnZXIgYmV0d2VlbiAwCiBhbmQgNjA7IFNFQyBpcyA2MCBmb3IgYSBsZWFwIHNl Y29uZCwgd2hpY2ggb25seSBzb21lIG9wZXJhdGluZyBzeXN0ZW1zCiBzdXBwb3J0LiAgTUlO VVRFIGlzIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1OS4gIEhPVVIgaXMgYW4gaW50ZWdl cgpAQCAtMjAxMywxNSArMjA5NywyMCBAQCBiZXR3ZWVuIDAgYW5kIDIzLiAgREFZIGlzIGFu IGludGVnZXIgYmV0d2VlbiAxIGFuZCAzMS4gIE1PTlRIIGlzIGFuCiBpbnRlZ2VyIGJldHdl ZW4gMSBhbmQgMTIuICBZRUFSIGlzIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUKIGZvdXIt ZGlnaXQgeWVhci4gIERPVyBpcyB0aGUgZGF5IG9mIHdlZWssIGFuIGludGVnZXIgYmV0d2Vl biAwIGFuZCA2LAogd2hlcmUgMCBpcyBTdW5kYXkuICBEU1QgaXMgdCBpZiBkYXlsaWdodCBz YXZpbmcgdGltZSBpcyBpbiBlZmZlY3QsCi1vdGhlcndpc2UgbmlsLiAgWk9ORSBpcyBhbiBp bnRlZ2VyIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBzZWNvbmRzCi1lYXN0IG9mIEdyZWVu d2ljaC4gIChOb3RlIHRoYXQgQ29tbW9uIExpc3AgaGFzIGRpZmZlcmVudCBtZWFuaW5ncyBm b3IKLURPVyBhbmQgWk9ORS4pICAqLykKLSAgKExpc3BfT2JqZWN0IHNwZWNpZmllZF90aW1l KQorb3RoZXJ3aXNlIG5pbC4gIFVUQ09GRiBpcyBhbiBpbnRlZ2VyIGluZGljYXRpbmcgdGhl IFVUQyBvZmZzZXQgaW4KK3NlY29uZHMsIGkuZS4sIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBl YXN0IG9mIEdyZWVud2ljaC4gIChOb3RlIHRoYXQKK0NvbW1vbiBMaXNwIGhhcyBkaWZmZXJl bnQgbWVhbmluZ3MgZm9yIERPVyBhbmQgVVRDT0ZGLikKKwordXNhZ2U6IChkZWNvZGUtdGlt ZSAmb3B0aW9uYWwgVElNRSBaT05FKSAgKi8pCisgIChMaXNwX09iamVjdCBzcGVjaWZpZWRf dGltZSwgTGlzcF9PYmplY3Qgem9uZSkKIHsKICAgdGltZV90IHRpbWVfc3BlYyA9IGxpc3Bf c2Vjb25kc19hcmd1bWVudCAoc3BlY2lmaWVkX3RpbWUpOwogICBzdHJ1Y3QgdG0gbG9jYWxf dG0sIGdtdF90bTsKKyAgdGltZXpvbmVfdCB0eiA9IHR6bG9va3VwICh6b25lLCBmYWxzZSk7 CisgIHN0cnVjdCB0bSAqdG0gPSBlbWFjc19sb2NhbHRpbWVfcnogKHR6LCAmdGltZV9zcGVj LCAmbG9jYWxfdG0pOworICB4dHpmcmVlICh0eik7CiAKLSAgaWYgKCEgKGxvY2FsdGltZV9y ICgmdGltZV9zcGVjLCAmbG9jYWxfdG0pCisgIGlmICghICh0bQogCSAmJiBNT1NUX05FR0FU SVZFX0ZJWE5VTSAtIFRNX1lFQVJfQkFTRSA8PSBsb2NhbF90bS50bV95ZWFyCiAJICYmIGxv Y2FsX3RtLnRtX3llYXIgPD0gTU9TVF9QT1NJVElWRV9GSVhOVU0gLSBUTV9ZRUFSX0JBU0Up KQogICAgIHRpbWVfb3ZlcmZsb3cgKCk7CkBAIC0yMDU5LDM1ICsyMTQ4LDEzIEBAIGNoZWNr X3RtX21lbWJlciAoTGlzcF9PYmplY3Qgb2JqLCBpbnQgb2Zmc2V0KQogICByZXR1cm4gbiAt IG9mZnNldDsKIH0KIAotLyogRGVjb2RlIFpPTkUgYXMgYSB0aW1lIHpvbmUgc3BlY2lmaWNh dGlvbi4gICovCi0KLXN0YXRpYyBMaXNwX09iamVjdAotZGVjb2RlX3RpbWVfem9uZSAoTGlz cF9PYmplY3Qgem9uZSkKLXsKLSAgaWYgKEVRICh6b25lLCBRdCkpCi0gICAgcmV0dXJuIGJ1 aWxkX3N0cmluZyAoIlVUQzAiKTsKLSAgZWxzZSBpZiAoU1RSSU5HUCAoem9uZSkpCi0gICAg cmV0dXJuIHpvbmU7Ci0gIGVsc2UgaWYgKElOVEVHRVJQICh6b25lKSkKLSAgICB7Ci0gICAg ICBzdGF0aWMgY2hhciBjb25zdCB0emJ1Zl9mb3JtYXRbXSA9ICJYWFglcyUicEkiZDolMDJk OiUwMmQiOwotICAgICAgY2hhciB0emJ1ZltzaXplb2YgdHpidWZfZm9ybWF0ICsgSU5UX1NU UkxFTl9CT1VORCAoRU1BQ1NfSU5UKV07Ci0gICAgICBFTUFDU19JTlQgYWJzem9uZSA9IGVh YnMgKFhJTlQgKHpvbmUpKSwgem9uZV9ociA9IGFic3pvbmUgLyAoNjAgKiA2MCk7Ci0gICAg ICBpbnQgem9uZV9taW4gPSAoYWJzem9uZSAvIDYwKSAlIDYwLCB6b25lX3NlYyA9IGFic3pv bmUgJSA2MDsKLQotICAgICAgcmV0dXJuIG1ha2VfZm9ybWF0dGVkX3N0cmluZyAodHpidWYs IHR6YnVmX2Zvcm1hdCwgJiItIltYSU5UICh6b25lKSA8IDBdLAotCQkJCSAgICB6b25lX2hy LCB6b25lX21pbiwgem9uZV9zZWMpOwotICAgIH0KLSAgZWxzZQotICAgIHhzaWduYWwyIChR ZXJyb3IsIGJ1aWxkX3N0cmluZyAoIkludmFsaWQgdGltZSB6b25lIHNwZWNpZmljYXRpb24i KSwgem9uZSk7Ci19Ci0KIERFRlVOICgiZW5jb2RlLXRpbWUiLCBGZW5jb2RlX3RpbWUsIFNl bmNvZGVfdGltZSwgNiwgTUFOWSwgMCwKICAgICAgICBkb2M6IC8qIENvbnZlcnQgU0VDT05E LCBNSU5VVEUsIEhPVVIsIERBWSwgTU9OVEgsIFlFQVIgYW5kIFpPTkUgdG8gaW50ZXJuYWwg dGltZS4KIFRoaXMgaXMgdGhlIHJldmVyc2Ugb3BlcmF0aW9uIG9mIGBkZWNvZGUtdGltZScs IHdoaWNoIHNlZS4KLVpPTkUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgdGltZSB6b25lIHJ1 bGUuICBUaGlzIGNhbgotYmUgYSBzdHJpbmcgb3IgdCAoYXMgZnJvbSBgc2V0LXRpbWUtem9u ZS1ydWxlJyksIG9yIGl0IGNhbiBiZSBhIGxpc3QKLVwoYXMgZnJvbSBgY3VycmVudC10aW1l LXpvbmUnKSBvciBhbiBpbnRlZ2VyIChhcyBmcm9tIGBkZWNvZGUtdGltZScpCitUaGUgb3B0 aW9uYWwgWk9ORSBpcyBvbWl0dGVkIG9yIG5pbCBmb3IgRW1hY3MgbG9jYWwgdGltZSwgdCBm b3IKK1VuaXZlcnNhbCBUaW1lLCBgd2FsbCcgZm9yIHN5c3RlbSB3YWxsIGNsb2NrIHRpbWUs IG9yIGEgc3RyaW5nIGFzIGluCitgc2V0LXRpbWUtem9uZS1ydWxlJyBmb3IgYSB0aW1lIHpv bmUgcnVsZS4gIEl0IGNhbiBhbHNvIGJlIGEgbGlzdCAoYXMKK2Zyb20gYGN1cnJlbnQtdGlt ZS16b25lJykgb3IgYW4gaW50ZWdlciAoYXMgZnJvbSBgZGVjb2RlLXRpbWUnKQogYXBwbGll ZCB3aXRob3V0IGNvbnNpZGVyYXRpb24gZm9yIGRheWxpZ2h0IHNhdmluZyB0aW1lLgogCiBZ b3UgY2FuIHBhc3MgbW9yZSB0aGFuIDcgYXJndW1lbnRzOyB0aGVuIHRoZSBmaXJzdCBzaXgg YXJndW1lbnRzCkBAIC0yMTIwLDE0ICsyMTg3LDkgQEAgdXNhZ2U6IChlbmNvZGUtdGltZSBT RUNPTkQgTUlOVVRFIEhPVVIgREFZIE1PTlRIIFlFQVIgJm9wdGlvbmFsIFpPTkUpICAqLykK IAogICBpZiAoQ09OU1AgKHpvbmUpKQogICAgIHpvbmUgPSBYQ0FSICh6b25lKTsKLSAgaWYg KE5JTFAgKHpvbmUpKQotICAgIHZhbHVlID0gbWt0aW1lICgmdG0pOwotICBlbHNlCi0gICAg ewotICAgICAgdGltZXpvbmVfdCB0eiA9IHR6YWxsb2MgKFNTREFUQSAoZGVjb2RlX3RpbWVf em9uZSAoem9uZSkpKTsKLSAgICAgIHZhbHVlID0gbWt0aW1lX3ogKHR6LCAmdG0pOwotICAg ICAgdHpmcmVlICh0eik7Ci0gICAgfQorICB0aW1lem9uZV90IHR6ID0gdHpsb29rdXAgKHpv bmUsIGZhbHNlKTsKKyAgdmFsdWUgPSBlbWFjc19ta3RpbWVfeiAodHosICZ0bSk7CisgIHh0 emZyZWUgKHR6KTsKIAogICBpZiAodmFsdWUgPT0gKHRpbWVfdCkgLTEpCiAgICAgdGltZV9v dmVyZmxvdyAoKTsKQEAgLTIxMzUsNyArMjE5Nyw4IEBAIHVzYWdlOiAoZW5jb2RlLXRpbWUg U0VDT05EIE1JTlVURSBIT1VSIERBWSBNT05USCBZRUFSICZvcHRpb25hbCBaT05FKSAgKi8p CiAgIHJldHVybiBsaXN0MmkgKGhpX3RpbWUgKHZhbHVlKSwgbG9fdGltZSAodmFsdWUpKTsK IH0KIAotREVGVU4gKCJjdXJyZW50LXRpbWUtc3RyaW5nIiwgRmN1cnJlbnRfdGltZV9zdHJp bmcsIFNjdXJyZW50X3RpbWVfc3RyaW5nLCAwLCAxLCAwLAorREVGVU4gKCJjdXJyZW50LXRp bWUtc3RyaW5nIiwgRmN1cnJlbnRfdGltZV9zdHJpbmcsIFNjdXJyZW50X3RpbWVfc3RyaW5n LAorICAgICAgIDAsIDIsIDAsCiAgICAgICAgZG9jOiAvKiBSZXR1cm4gdGhlIGN1cnJlbnQg bG9jYWwgdGltZSwgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuCiBQcm9ncmFtcyBjYW4g dXNlIHRoaXMgZnVuY3Rpb24gdG8gZGVjb2RlIGEgdGltZSwKIHNpbmNlIHRoZSBudW1iZXIg b2YgY29sdW1ucyBpbiBlYWNoIGZpZWxkIGlzIGZpeGVkCkBAIC0yMTQ4LDE3ICsyMjExLDI0 IEBAIElmIFNQRUNJRklFRC1USU1FIGlzIGdpdmVuLCBpdCBpcyBhIHRpbWUgdG8gZm9ybWF0 IGluc3RlYWQgb2YgdGhlCiBjdXJyZW50IHRpbWUuICBUaGUgYXJndW1lbnQgc2hvdWxkIGhh dmUgdGhlIGZvcm0gKEhJR0ggTE9XIC4gSUdOT1JFRCkuCiBUaHVzLCB5b3UgY2FuIHVzZSB0 aW1lcyBvYnRhaW5lZCBmcm9tIGBjdXJyZW50LXRpbWUnIGFuZCBmcm9tCiBgZmlsZS1hdHRy aWJ1dGVzJy4gIFNQRUNJRklFRC1USU1FIGNhbiBhbHNvIGhhdmUgdGhlIGZvcm0gKEhJR0gg LiBMT1cpLAotYnV0IHRoaXMgaXMgY29uc2lkZXJlZCBvYnNvbGV0ZS4gICovKQotICAoTGlz cF9PYmplY3Qgc3BlY2lmaWVkX3RpbWUpCitidXQgdGhpcyBpcyBjb25zaWRlcmVkIG9ic29s ZXRlLgorCitUaGUgb3B0aW9uYWwgWk9ORSBpcyBvbWl0dGVkIG9yIG5pbCBmb3IgRW1hY3Mg bG9jYWwgdGltZSwgdCBmb3IKK1VuaXZlcnNhbCBUaW1lLCBgd2FsbCcgZm9yIHN5c3RlbSB3 YWxsIGNsb2NrIHRpbWUsIG9yIGEgc3RyaW5nIGFzIGluCitgc2V0LXRpbWUtem9uZS1ydWxl JyBmb3IgYSB0aW1lIHpvbmUgcnVsZS4gICovKQorICAoTGlzcF9PYmplY3Qgc3BlY2lmaWVk X3RpbWUsIExpc3BfT2JqZWN0IHpvbmUpCiB7CiAgIHRpbWVfdCB2YWx1ZSA9IGxpc3Bfc2Vj b25kc19hcmd1bWVudCAoc3BlY2lmaWVkX3RpbWUpOworICB0aW1lem9uZV90IHR6ID0gdHps b29rdXAgKHpvbmUsIGZhbHNlKTsKIAogICAvKiBDb252ZXJ0IHRvIGEgc3RyaW5nIGluIGN0 aW1lIGZvcm1hdCwgZXhjZXB0IHdpdGhvdXQgdGhlIHRyYWlsaW5nCiAgICAgIG5ld2xpbmUs IGFuZCB3aXRob3V0IHRoZSA0LWRpZ2l0IHllYXIgbGltaXQuICBEb24ndCB1c2UgYXNjdGlt ZQogICAgICBvciBjdGltZSwgYXMgdGhleSBtaWdodCBkdW1wIGNvcmUgaWYgdGhlIHllYXIg aXMgb3V0c2lkZSB0aGUKICAgICAgcmFuZ2UgLTk5OSAuLiA5OTk5LiAgKi8KICAgc3RydWN0 IHRtIHRtOwotICBpZiAoISBsb2NhbHRpbWVfciAoJnZhbHVlLCAmdG0pKQorICBzdHJ1Y3Qg dG0gKnRtcCA9IGVtYWNzX2xvY2FsdGltZV9yeiAodHosICZ2YWx1ZSwgJnRtKTsKKyAgeHR6 ZnJlZSAodHopOworICBpZiAoISB0bXApCiAgICAgdGltZV9vdmVyZmxvdyAoKTsKIAogICBz dGF0aWMgY2hhciBjb25zdCB3ZGF5X25hbWVbXVs0XSA9CkBAIC0yMjEwLDcgKzIyODAsNyBA QCB0bV9nbXRvZmYgKHN0cnVjdCB0bSAqYSkKICNlbmRpZgogfQogCi1ERUZVTiAoImN1cnJl bnQtdGltZS16b25lIiwgRmN1cnJlbnRfdGltZV96b25lLCBTY3VycmVudF90aW1lX3pvbmUs IDAsIDEsIDAsCitERUZVTiAoImN1cnJlbnQtdGltZS16b25lIiwgRmN1cnJlbnRfdGltZV96 b25lLCBTY3VycmVudF90aW1lX3pvbmUsIDAsIDIsIDAsCiAgICAgICAgZG9jOiAvKiBSZXR1 cm4gdGhlIG9mZnNldCBhbmQgbmFtZSBmb3IgdGhlIGxvY2FsIHRpbWUgem9uZS4KIFRoaXMg cmV0dXJucyBhIGxpc3Qgb2YgdGhlIGZvcm0gKE9GRlNFVCBOQU1FKS4KIE9GRlNFVCBpcyBh biBpbnRlZ2VyIG51bWJlciBvZiBzZWNvbmRzIGFoZWFkIG9mIFVUQyAoZWFzdCBvZiBHcmVl bndpY2gpLgpAQCAtMjIyMSwxMSArMjI5MSwxMyBAQCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBj dXJyZW50IHRpbWUuICBUaGUgYXJndW1lbnQgc2hvdWxkIGhhdmUgdGhlIGZvcm0KIChISUdI IExPVyAuIElHTk9SRUQpLiAgVGh1cywgeW91IGNhbiB1c2UgdGltZXMgb2J0YWluZWQgZnJv bQogYGN1cnJlbnQtdGltZScgYW5kIGZyb20gYGZpbGUtYXR0cmlidXRlcycuICBTUEVDSUZJ RUQtVElNRSBjYW4gYWxzbwogaGF2ZSB0aGUgZm9ybSAoSElHSCAuIExPVyksIGJ1dCB0aGlz IGlzIGNvbnNpZGVyZWQgb2Jzb2xldGUuCitPcHRpb25hbCBzZWNvbmQgYXJnIFpPTkUgaXMg b21pdHRlZCBvciBuaWwgZm9yIHRoZSBsb2NhbCB0aW1lIHpvbmUsIG9yCithIHN0cmluZyBh cyBpbiBgc2V0LXRpbWUtem9uZS1ydWxlJy4KIAogU29tZSBvcGVyYXRpbmcgc3lzdGVtcyBj YW5ub3QgcHJvdmlkZSBhbGwgdGhpcyBpbmZvcm1hdGlvbiB0byBFbWFjczsKIGluIHRoaXMg Y2FzZSwgYGN1cnJlbnQtdGltZS16b25lJyByZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIG5p bCBmb3IKIHRoZSBkYXRhIGl0IGNhbid0IGZpbmQuICAqLykKLSAgKExpc3BfT2JqZWN0IHNw ZWNpZmllZF90aW1lKQorICAoTGlzcF9PYmplY3Qgc3BlY2lmaWVkX3RpbWUsIExpc3BfT2Jq ZWN0IHpvbmUpCiB7CiAgIHN0cnVjdCB0aW1lc3BlYyB2YWx1ZTsKICAgc3RydWN0IHRtIGxv Y2FsX3RtLCBnbXRfdG07CkBAIC0yMjMzLDcgKzIzMDUsOCBAQCB0aGUgZGF0YSBpdCBjYW4n dCBmaW5kLiAgKi8pCiAKICAgem9uZV9vZmZzZXQgPSBRbmlsOwogICB2YWx1ZSA9IG1ha2Vf dGltZXNwZWMgKGxpc3Bfc2Vjb25kc19hcmd1bWVudCAoc3BlY2lmaWVkX3RpbWUpLCAwKTsK LSAgem9uZV9uYW1lID0gZm9ybWF0X3RpbWVfc3RyaW5nICgiJVoiLCBzaXplb2YgIiVaIiAt IDEsIHZhbHVlLCAwLCAmbG9jYWxfdG0pOworICB6b25lX25hbWUgPSBmb3JtYXRfdGltZV9z dHJpbmcgKCIlWiIsIHNpemVvZiAiJVoiIC0gMSwgdmFsdWUsCisJCQkJICB6b25lLCAmbG9j YWxfdG0pOwogCiAgIGlmIChIQVZFX1RNX0dNVE9GRiB8fCBnbXRpbWVfciAoJnZhbHVlLnR2 X3NlYywgJmdtdF90bSkpCiAgICAgewpAQCAtMjI1OSw0MiArMjMzMiw0OCBAQCB0aGUgZGF0 YSBpdCBjYW4ndCBmaW5kLiAgKi8pCiB9CiAKIERFRlVOICgic2V0LXRpbWUtem9uZS1ydWxl IiwgRnNldF90aW1lX3pvbmVfcnVsZSwgU3NldF90aW1lX3pvbmVfcnVsZSwgMSwgMSwgMCwK LSAgICAgICBkb2M6IC8qIFNldCB0aGUgbG9jYWwgdGltZSB6b25lIHVzaW5nIFRaLCBhIHN0 cmluZyBzcGVjaWZ5aW5nIGEgdGltZSB6b25lIHJ1bGUuCi1JZiBUWiBpcyBuaWwsIHVzZSBp bXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRlZmF1bHQgdGltZSB6b25lIGluZm9ybWF0aW9uLgot SWYgVFogaXMgdCwgdXNlIFVuaXZlcnNhbCBUaW1lLiAgSWYgVFogaXMgYW4gaW50ZWdlciwg aXQgaXMgdHJlYXRlZCBhcyBpbgotYGVuY29kZS10aW1lJy4KLQotSW5zdGVhZCBvZiBjYWxs aW5nIHRoaXMgZnVuY3Rpb24sIHlvdSB0eXBpY2FsbHkgd2FudCAoc2V0ZW52ICJUWiIgVFop LgotVGhhdCBjaGFuZ2VzIGJvdGggdGhlIGVudmlyb25tZW50IG9mIHRoZSBFbWFjcyBwcm9j ZXNzIGFuZCB0aGUKLXZhcmlhYmxlIGBwcm9jZXNzLWVudmlyb25tZW50Jywgd2hlcmVhcyBg c2V0LXRpbWUtem9uZS1ydWxlJyBhZmZlY3RzCi1vbmx5IHRoZSBmb3JtZXIuICAqLykKKyAg ICAgICBkb2M6IC8qIFNldCB0aGUgRW1hY3MgbG9jYWwgdGltZSB6b25lIHVzaW5nIFRaLCBh IHN0cmluZyBzcGVjaWZ5aW5nIGEgdGltZSB6b25lIHJ1bGUuCitJZiBUWiBpcyBuaWwgb3Ig YHdhbGwnLCB1c2Ugc3lzdGVtIHdhbGwgY2xvY2sgdGltZS4gIElmIFRaIGlzIHQsIHVzZQor VW5pdmVyc2FsIFRpbWUuICBJZiBUWiBpcyBhbiBpbnRlZ2VyLCB0cmVhdCBpdCBhcyBpbiBg ZW5jb2RlLXRpbWUnLgorCitJbnN0ZWFkIG9mIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgeW91 IHR5cGljYWxseSB3YW50IHNvbWV0aGluZyBlbHNlLgorVG8gdGVtcG9yYXJpbHkgdXNlIGEg ZGlmZmVyZW50IHRpbWUgem9uZSBydWxlIGZvciBqdXN0IG9uZSBpbnZvY2F0aW9uCitvZiBg ZGVjb2RlLXRpbWUnLCBgZW5jb2RlLXRpbWUnLCBvciBgZm9ybWF0LXRpbWUtc3RyaW5nJywg cGFzcyB0aGUKK2Z1bmN0aW9uIGEgWk9ORSBhcmd1bWVudC4gIFRvIGNoYW5nZSBsb2NhbCB0 aW1lIGNvbnNpc3RlbnRseQordGhyb3VnaG91dCBFbWFjcywgY2FsbCAoc2V0ZW52ICJUWiIg VFopOiB0aGlzIGNoYW5nZXMgYm90aCB0aGUKK2Vudmlyb25tZW50IG9mIHRoZSBFbWFjcyBw cm9jZXNzIGFuZCB0aGUgdmFyaWFibGUKK2Bwcm9jZXNzLWVudmlyb25tZW50Jywgd2hlcmVh cyBgc2V0LXRpbWUtem9uZS1ydWxlJyBhZmZlY3RzIG9ubHkgdGhlCitmb3JtZXIuICAqLykK ICAgKExpc3BfT2JqZWN0IHR6KQogewotICBjb25zdCBjaGFyICp0enN0cmluZyA9IE5JTFAg KHR6KSA/IGluaXRpYWxfdHogOiBTU0RBVEEgKGRlY29kZV90aW1lX3pvbmUgKHR6KSk7Cisg IHR6bG9va3VwIChOSUxQICh0eikgPyBRd2FsbCA6IHR6LCB0cnVlKTsKKyAgcmV0dXJuIFFu aWw7Cit9CiAKLSAgYmxvY2tfaW5wdXQgKCk7Ci0gIHNldF90aW1lX3pvbmVfcnVsZSAodHpz dHJpbmcpOwotICB1bmJsb2NrX2lucHV0ICgpOworLyogQSBidWZmZXIgaG9sZGluZyBhIHN0 cmluZyBvZiB0aGUgZm9ybSAiVFo9dmFsdWUiLCBpbnRlbmRlZAorICAgdG8gYmUgcGFydCBv ZiB0aGUgZW52aXJvbm1lbnQuICBJZiBUWiBpcyBzdXBwb3NlZCB0byBiZSB1bnNldCwKKyAg IHRoZSBidWZmZXIgc3RyaW5nIGlzICJ0Wj0iLiAgKi8KKyBzdGF0aWMgY2hhciAqdHp2YWxi dWY7CiAKLSAgcmV0dXJuIFFuaWw7CisvKiBHZXQgdGhlIGxvY2FsIHRpbWUgem9uZSBydWxl LiAgKi8KK2NoYXIgKgorZW1hY3NfZ2V0ZW52X1RaICh2b2lkKQoreworICByZXR1cm4gdHp2 YWxidWZbMF0gPT0gJ1QnID8gdHp2YWxidWYgKyB0emVxbGVuIDogMDsKIH0KIAotLyogU2V0 IHRoZSBsb2NhbCB0aW1lIHpvbmUgcnVsZSB0byBUWlNUUklORy4KKy8qIFNldCB0aGUgbG9j YWwgdGltZSB6b25lIHJ1bGUgdG8gVFpTVFJJTkcsIHdoaWNoIGNhbiBiZSBudWxsIHRvCisg ICBkZW5vdGUgd2FsbCBjbG9jayB0aW1lLiAgRG8gbm90IHJlY29yZCB0aGUgc2V0dGluZyBp biBMT0NBTF9UWi4KIAogICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgdGhyZWFkLXNhZmUsIGlu IHRoZW9yeSBiZWNhdXNlIHB1dGVudiBpcyBub3QsCiAgICBidXQgbW9zdGx5IGJlY2F1c2Ug b2YgdGhlIHN0YXRpYyBzdG9yYWdlIGl0IHVwZGF0ZXMuICBPdGhlciB0aHJlYWRzCiAgICB0 aGF0IGludm9rZSBsb2NhbHRpbWUgZXRjLiBtYXkgYmUgYWR2ZXJzZWx5IGFmZmVjdGVkIHdo aWxlIHRoaXMKICAgIGZ1bmN0aW9uIGlzIGV4ZWN1dGluZy4gICovCiAKLXN0YXRpYyB2b2lk Ci1zZXRfdGltZV96b25lX3J1bGUgKGNvbnN0IGNoYXIgKnR6c3RyaW5nKQoraW50CitlbWFj c19zZXRlbnZfVFogKGNvbnN0IGNoYXIgKnR6c3RyaW5nKQogewotICAvKiBBIGJ1ZmZlciBo b2xkaW5nIGEgc3RyaW5nIG9mIHRoZSBmb3JtICJUWj12YWx1ZSIsIGludGVuZGVkCi0gICAg IHRvIGJlIHBhcnQgb2YgdGhlIGVudmlyb25tZW50LiAgKi8KLSAgc3RhdGljIGNoYXIgKnR6 dmFsYnVmOwogICBzdGF0aWMgcHRyZGlmZl90IHR6dmFsYnVmc2l6ZTsKLQotICBpbnQgdHpl cWxlbiA9IHNpemVvZiAiVFo9IiAtIDE7CiAgIHB0cmRpZmZfdCB0enN0cmluZ2xlbiA9IHR6 c3RyaW5nID8gc3RybGVuICh0enN0cmluZykgOiAwOwogICBjaGFyICp0enZhbCA9IHR6dmFs YnVmOwogICBib29sIG5ld190enZhbGJ1ZiA9IHR6dmFsYnVmc2l6ZSA8PSB0emVxbGVuICsg dHpzdHJpbmdsZW47CkBAIC0yMzQ2LDkgKzI0MjUsNyBAQCBzZXRfdGltZV96b25lX3J1bGUg KGNvbnN0IGNoYXIgKnR6c3RyaW5nKQogICAgICAgeHB1dGVudiAodHp2YWwpOwogICAgIH0K IAotI2lmZGVmIEhBVkVfVFpTRVQKLSAgdHpzZXQgKCk7Ci0jZW5kaWYKKyAgcmV0dXJuIDA7 CiB9CiAMCiAvKiBJbnNlcnQgTkFSR1MgTGlzcCBvYmplY3RzIGluIHRoZSBhcnJheSBBUkdT IGJ5IGNhbGxpbmcgSU5TRVJUX0ZVTkMKQEAgLTQ5NDMsNiArNTAyMCw3IEBAIHZvaWQKIHN5 bXNfb2ZfZWRpdGZucyAodm9pZCkKIHsKICAgREVGU1lNIChRYnVmZmVyX2FjY2Vzc19mb250 aWZ5X2Z1bmN0aW9ucywgImJ1ZmZlci1hY2Nlc3MtZm9udGlmeS1mdW5jdGlvbnMiKTsKKyAg REVGU1lNIChRd2FsbCwgIndhbGwiKTsKIAogICBERUZWQVJfTElTUCAoImluaGliaXQtZmll bGQtdGV4dC1tb3Rpb24iLCBWaW5oaWJpdF9maWVsZF90ZXh0X21vdGlvbiwKIAkgICAgICAg ZG9jOiAvKiBOb24tbmlsIG1lYW5zIHRleHQgbW90aW9uIGNvbW1hbmRzIGRvbid0IG5vdGlj ZSBmaWVsZHMuICAqLyk7CmRpZmYgLS1naXQgYS9zcmMvZW1hY3MuYyBiL3NyYy9lbWFjcy5j CmluZGV4IDkzZmI1ODcuLjZlMzU0OTYgMTAwNjQ0Ci0tLSBhL3NyYy9lbWFjcy5jCisrKyBi L3NyYy9lbWFjcy5jCkBAIC0xNTUyLDcgKzE1NTIsNyBAQCBVc2luZyBhbiBFbWFjcyBjb25m aWd1cmVkIHdpdGggLS13aXRoLXgtdG9vbGtpdD1sdWNpZCBkb2VzIG5vdCBoYXZlIHRoaXMg cHJvYmxlbQogCiAgIC8qIFRoaXMgY2FsbHMgcHV0ZW52IGFuZCBzbyBtdXN0IHByZWNlZGUg aW5pdF9wcm9jZXNzX2VtYWNzLiAgQWxzbywKICAgICAgaXQgc2V0cyBWb3BlcmF0aW5nX3N5 c3RlbV9yZWxlYXNlLCB3aGljaCBpbml0X3Byb2Nlc3NfZW1hY3MgdXNlcy4gICovCi0gIGlu aXRfZWRpdGZucyAoKTsKKyAgaW5pdF9lZGl0Zm5zIChkdW1waW5nKTsKIAogICAvKiBUaGVz ZSB0d28gY2FsbCBwdXRlbnYuICAqLwogI2lmZGVmIEhBVkVfREJVUwpkaWZmIC0tZ2l0IGEv c3JjL2xpc3AuaCBiL3NyYy9saXNwLmgKaW5kZXggMzQxNjAzZi4uMDIxMDlkNyAxMDA2NDQK LS0tIGEvc3JjL2xpc3AuaAorKysgYi9zcmMvbGlzcC5oCkBAIC00MDU1LDcgKzQwNTUsNyBA QCBleHRlcm4gX05vcmV0dXJuIHZvaWQgdGltZV9vdmVyZmxvdyAodm9pZCk7CiBleHRlcm4g TGlzcF9PYmplY3QgbWFrZV9idWZmZXJfc3RyaW5nIChwdHJkaWZmX3QsIHB0cmRpZmZfdCwg Ym9vbCk7CiBleHRlcm4gTGlzcF9PYmplY3QgbWFrZV9idWZmZXJfc3RyaW5nX2JvdGggKHB0 cmRpZmZfdCwgcHRyZGlmZl90LCBwdHJkaWZmX3QsCiAJCQkJCSAgICBwdHJkaWZmX3QsIGJv b2wpOwotZXh0ZXJuIHZvaWQgaW5pdF9lZGl0Zm5zICh2b2lkKTsKK2V4dGVybiB2b2lkIGlu aXRfZWRpdGZucyAoYm9vbCk7CiBleHRlcm4gdm9pZCBzeW1zX29mX2VkaXRmbnMgKHZvaWQp OwogCiAvKiBEZWZpbmVkIGluIGJ1ZmZlci5jLiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zeXN0 aW1lLmggYi9zcmMvc3lzdGltZS5oCmluZGV4IDc0NGFmMTcuLmFiYmU2MDEgMTAwNjQ0Ci0t LSBhL3NyYy9zeXN0aW1lLmgKKysrIGIvc3JjL3N5c3RpbWUuaApAQCAtMTA2LDIwICsxMDYs NiBAQCBleHRlcm4gc3RydWN0IHRpbWVzcGVjIGxpc3BfdG9fdGltZXNwZWMgKHN0cnVjdCBs aXNwX3RpbWUpOwogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyBsaXNwX3RpbWVfYXJndW1lbnQg KExpc3BfT2JqZWN0KTsKICNlbmRpZgogCi0jaWZuZGVmIEhBVkVfVFpBTExPQwotIyB1bmRl ZiBta3RpbWVfegotIyB1bmRlZiB0aW1lem9uZV90Ci0jIHVuZGVmIHR6YWxsb2MKLSMgdW5k ZWYgdHpmcmVlCi0jIGRlZmluZSBta3RpbWVfeiBlbWFjc19ta3RpbWVfegotIyBkZWZpbmUg dGltZXpvbmVfdCBlbWFjc190aW1lem9uZV90Ci0jIGRlZmluZSB0emFsbG9jIGVtYWNzX3R6 YWxsb2MKLSMgZGVmaW5lIHR6ZnJlZSBlbWFjc190emZyZWUKLXR5cGVkZWYgY2hhciBjb25z dCAqdGltZXpvbmVfdDsKLUlOTElORSB0aW1lem9uZV90IHR6YWxsb2MgKGNoYXIgY29uc3Qg Km5hbWUpIHsgcmV0dXJuIG5hbWU7IH0KLUlOTElORSB2b2lkIHR6ZnJlZSAodGltZXpvbmVf dCB0eikgeyB9Ci0jZW5kaWYKLQogSU5MSU5FX0hFQURFUl9FTkQKIAogI2VuZGlmIC8qIEVN QUNTX1NZU1RJTUVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RpbWVfcnouYyBiL3NyYy90aW1l X3J6LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLSAK Mi4xLjAKCg== --------------010405080708080809030701-- From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 26 03:12:13 2015 Received: (at control) by debbugs.gnu.org; 26 Jul 2015 07:12:13 +0000 Received: from localhost ([127.0.0.1]:58817 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJG6W-0001UA-Nv for submit@debbugs.gnu.org; Sun, 26 Jul 2015 03:12:12 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:54580) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJG6U-0001U2-Vr for control@debbugs.gnu.org; Sun, 26 Jul 2015 03:12:11 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 48B3416099B for ; Sun, 26 Jul 2015 00:12:10 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id sQypenfz4c7A for ; Sun, 26 Jul 2015 00:12:04 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id CA1F5160CB6 for ; Sun, 26 Jul 2015 00:12:04 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id X88h6OcsHref for ; Sun, 26 Jul 2015 00:12:04 -0700 (PDT) Received: from [192.168.1.9] (pool-100-32-155-148.lsanca.fios.verizon.net [100.32.155.148]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id B012816099B for ; Sun, 26 Jul 2015 00:12:04 -0700 (PDT) Message-ID: <55B48844.2080703@cs.ucla.edu> Date: Sun, 26 Jul 2015 00:12:04 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: control@debbugs.gnu.org Subject: 21020 has a patch Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -1.2 (-) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.2 (-) tags 21020 patch thanks From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 26 10:48:47 2015 Received: (at 21020) by debbugs.gnu.org; 26 Jul 2015 14:48:47 +0000 Received: from localhost ([127.0.0.1]:59261 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJNEM-0008OY-TG for submit@debbugs.gnu.org; Sun, 26 Jul 2015 10:48:47 -0400 Received: from mtaout26.012.net.il ([80.179.55.182]:33364) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJNEJ-0008OF-Jc for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 10:48:44 -0400 Received: from conversion-daemon.mtaout26.012.net.il by mtaout26.012.net.il (HyperSendmail v2007.08) id <0NS300M00NQDKY00@mtaout26.012.net.il> for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 17:51:58 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout26.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NS300FP5NYLD270@mtaout26.012.net.il>; Sun, 26 Jul 2015 17:51:58 +0300 (IDT) Date: Sun, 26 Jul 2015 17:48:30 +0300 From: Eli Zaretskii Subject: Re: 24.4; `display-time-world' tampers with TZ In-reply-to: <55B487B4.7060709@cs.ucla.edu> X-012-Sender: halo1@inter.net.il To: Paul Eggert Message-id: <83vbd7yny9.fsf@gnu.org> References: <55B487B4.7060709@cs.ucla.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Sun, 26 Jul 2015 00:09:40 -0700 > From: Paul Eggert > CC: 21020@debbugs.gnu.org, Eli Zaretskii > > Thanks for the bug report. Improving Emacs time zones has been on my TODO list > for ages, and the report prompted me to do that. Attached is a patch which > works for me on GNU/Linux. I'm CC'ing this to Eli to give him a heads-up in > case it has implications on MS-Windows. This is a large patch, touching a lot of code. I hope we have some tests to make sure this doesn't cause any regressions. Other than that, please make in nt/gnulib.mk the same changes you did in lib/gnulib.mk, otherwise I think the changes will not compile on Windows. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 26 13:06:03 2015 Received: (at 21020) by debbugs.gnu.org; 26 Jul 2015 17:06:03 +0000 Received: from localhost ([127.0.0.1]:59339 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJPN8-0003AV-1b for submit@debbugs.gnu.org; Sun, 26 Jul 2015 13:06:03 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:33508) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJPN0-0003AG-Sa for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 13:05:56 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 1504B16099B; Sun, 26 Jul 2015 10:05:50 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id och0r84x1ozd; Sun, 26 Jul 2015 10:05:44 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 73037160CB6; Sun, 26 Jul 2015 10:05:44 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id RZuc5xTORVaD; Sun, 26 Jul 2015 10:05:44 -0700 (PDT) Received: from [192.168.1.9] (pool-100-32-155-148.lsanca.fios.verizon.net [100.32.155.148]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 2C64716099B; Sun, 26 Jul 2015 10:05:44 -0700 (PDT) Message-ID: <55B51362.2010301@cs.ucla.edu> Date: Sun, 26 Jul 2015 10:05:38 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: 24.4; `display-time-world' tampers with TZ References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> In-Reply-To: <83vbd7yny9.fsf@gnu.org> Content-Type: multipart/mixed; boundary="------------070208050202080905070901" X-Spam-Score: 1.7 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Eli Zaretskii wrote: > I hope we have some > tests to make sure this doesn't cause any regressions. test/automated/icalender-tests.el exercises the new code. [...] Content analysis details: (1.7 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain 1.7 URIBL_BLACK Contains an URL listed in the URIBL blacklist [URIs: configure.ac] X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.7 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Eli Zaretskii wrote: > I hope we have some > tests to make sure this doesn't cause any regressions. test/automated/icalender-tests.el exercises the new code. [...] Content analysis details: (1.7 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.7 URIBL_BLACK Contains an URL listed in the URIBL blacklist [URIs: configure.ac] -0.0 SPF_PASS SPF: sender matches SPF record -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain This is a multi-part message in MIME format. --------------070208050202080905070901 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Eli Zaretskii wrote: > I hope we have some > tests to make sure this doesn't cause any regressions. test/automated/icalender-tests.el exercises the new code. > Other than that, please make in nt/gnulib.mk the same changes you did > in lib/gnulib.mk, otherwise I think the changes will not compile on > Windows. OK, done in the revised patch (attached). Also, the MS-Windows port can't entirely skip the time module any more, as that module arranges for time.h to declare localtime_rz and friends. I guess one possibility is to have nt/gnulib.mk mimic lib/gnulib.mk as far as the time module goes; this is also done in the revised patch. --------------070208050202080905070901 Content-Type: text/x-diff; name="0001-New-optional-ZONE-arg-for-format-time-string-etc.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename*0="0001-New-optional-ZONE-arg-for-format-time-string-etc.patch" =46rom e0b2b39847c73c02ecfbd30c8c715b8913d54a44 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 26 Jul 2015 00:01:34 -0700 Subject: [PATCH] New optional ZONE arg for format-time-string etc. This simplifies time conversions in other time zones. It also prevents display-time-world tampering with TZ (Bug#21020). * admin/admin.el (add-release-logs): Use improved add-log-time-format API. * admin/merge-gnulib (GNULIB_MODULES): Add time_rz, timegm. (GNULIB_TOOL_FLAGS): Avoid flexmember, setenv, unsetenv. * configure.ac (tzalloc): Remove test for this, since Emacs no longer uses HAVE_TZALLOC directly. * doc/lispref/os.texi (Time of Day, Time Conversion) (Time Parsing): * etc/NEWS: Document the new behavior. Merge from gnulib, incorporating: 2015-07-25 strftime: fix newly-introduced bug on Solaris 2015-07-23 fprintftime, strftime: use timezone_t args * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate. * lib/strftime.c, lib/strftime.h, lib/time.in.h, m4/sys_time_h.m4: * m4/time_h.m4: Update from gnulib. * lib/time_rz.c, lib/timegm.c, m4/time_rz.m4, m4/timegm.m4: New files from gnulib. * lisp/time-stamp.el (time-stamp-string): * lisp/time.el (display-time-world-list) (display-time-world-display): Use new API, with time zone arg. * lisp/time.el (display-time-world-display): Fix race when current-time advances while we're running. * lisp/vc/add-log.el (add-log-iso8601-time-zone) (add-log-iso8601-time-string): Accept optional time zone arg. * lisp/vc/add-log.el (add-change-log-entry): * lisp/vc/log-edit.el (log-edit-changelog-ours-p): Use new arg. * nt/gnulib.mk: Propagate lib/gnulib.mk changes here. Add rules for the time module, since they're now needed for tzalloc etc. * src/conf_post.h (getenv_TZ, setenv_TZ): New macros. (emacs_getenv_TZ, emacs_setenv_TZ): New decls. * src/editfns.c: Include errno.h. (set_time_zone_rule): Omit unnecessary forward decl. (initial_tz): Remove, replacing with ... (local_tz, wall_clock_tz, utc_tz): New static vars and constants. (tzeqlen): New constant; prefer it to (sizeof "TZ=3D" - 1). (emacs_localtime_rz, emacs_mktime_z, xtzalloc, xtzfree) (tzlookup): New static functions. (init_editfns): New arg DUMPING. All uses changed. (init_editfns): Omit most initialization if dumping, not if !initialized. Initialize wall_clock_tz and local_tz. (emacs_nmemftime, format_time_string): Time zone argument can now be any time zone, not just a boolean for UTC or local time. All callers changed. (Fformat_time_string, Fencode_time, Fcurrent_time_string) (Fcurrent_time_zone): New optional arg ZONE. (Fdecode_time, Fset_time_zone_rule): ZONE arg can now also take the same form as with the other new additions. (decode_time_zone): Remove; no longer needed. (tzvalbuf): Now file-scope. (emacs_getenv_TZ, emacs_setenv_TZ): New functions. (syms_of_editfns): Define Qwall. * src/editfns.c (mktime_z) [!HAVE_TZALLOC]: * src/systime.h (mktime_z, timezone_t, tzalloc, tzfree) [!HAVE_TZALLOC]: Remove; now supplied by gnulib. * src/emacs.c (main): * src/lisp.h (init_editfns): Adjust to init_editfns API change. --- admin/admin.el | 6 +- admin/merge-gnulib | 8 +- configure.ac | 2 +- doc/lispref/os.texi | 80 ++++++----- etc/NEWS | 9 ++ lib/gnulib.mk | 42 ++++-- lib/strftime.c | 64 +++------ lib/strftime.h | 7 +- lib/time.in.h | 19 +++ lib/time_rz.c | 374 ++++++++++++++++++++++++++++++++++++++++++++++= ++++++ lib/timegm.c | 38 ++++++ lisp/time-stamp.el | 12 +- lisp/time.el | 33 ++--- lisp/vc/add-log.el | 23 ++-- lisp/vc/log-edit.el | 3 +- m4/gnulib-comp.m4 | 43 ++++-- m4/sys_time_h.m4 | 1 + m4/time_h.m4 | 1 + m4/time_rz.m4 | 21 +++ m4/timegm.m4 | 26 ++++ nt/gnulib.mk | 88 +++++++++++-- src/conf_post.h | 7 + src/editfns.c | 324 ++++++++++++++++++++++++++++----------------- src/emacs.c | 2 +- src/lisp.h | 2 +- src/systime.h | 14 -- 26 files changed, 941 insertions(+), 308 deletions(-) create mode 100644 lib/time_rz.c create mode 100644 lib/timegm.c create mode 100644 m4/time_rz.m4 create mode 100644 m4/timegm.m4 diff --git a/admin/admin.el b/admin/admin.el index 93e9124..267f2c4 100644 --- a/admin/admin.el +++ b/admin/admin.el @@ -38,14 +38,12 @@ Optional argument DATE is the release date, default t= oday." emacs-minor-version)) (read-string "Release date: " (progn (require 'add-log) - (let ((add-log-time-zone-rule t)) - (funcall add-log-time-format)))))) + (funcall add-log-time-format ni= l t))))) (setq root (expand-file-name root)) (unless (file-exists-p (expand-file-name "src/emacs.c" root)) (user-error "%s doesn't seem to be the root of an Emacs source tree"= root)) (require 'add-log) - (or date (setq date (let ((add-log-time-zone-rule t)) - (funcall add-log-time-format)))) + (or date (setq date (funcall add-log-time-format nil t))) (let* ((logs (process-lines "find" root "-name" "ChangeLog")) (entry (format "%s %s <%s>\n\n\t* Version %s released.\n\n" date diff --git a/admin/merge-gnulib b/admin/merge-gnulib index e7910a6..963c3a0 100755 --- a/admin/merge-gnulib +++ b/admin/merge-gnulib @@ -37,20 +37,20 @@ GNULIB_MODULES=3D' pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat - sys_time time time_r timer-time timespec-add timespec-sub + sys_time time time_r time_rz timegm timer-time timespec-add timespec-s= ub unsetenv update-copyright utimens vla warnings ' =20 GNULIB_TOOL_FLAGS=3D' --avoid=3Dclose --avoid=3Ddup - --avoid=3Dfchdir --avoid=3Dfstat + --avoid=3Dfchdir --avoid=3Dflexmember --avoid=3Dfstat --avoid=3Dmalloc-posix --avoid=3Dmsvc-inval --avoid=3Dmsvc-nothrow --avoid=3Dopen --avoid=3Dopenat-die --avoid=3Dopendir --avoid=3Draise - --avoid=3Dsave-cwd --avoid=3Dselect --avoid=3Dsigprocmask + --avoid=3Dsave-cwd --avoid=3Dselect --avoid=3Dsetenv --avoid=3Dsigproc= mask --avoid=3Dstdarg --avoid=3Dstdbool - --avoid=3Dthreadlib + --avoid=3Dthreadlib --avoid=3Dunsetenv --conditional-dependencies --import --no-changelog --no-vc-files --makefile-name=3Dgnulib.mk ' diff --git a/configure.ac b/configure.ac index b58c7de..19b8b9d 100644 --- a/configure.ac +++ b/configure.ac @@ -4000,7 +4000,7 @@ AC_SUBST(KRB4LIB) =20 AC_CHECK_HEADERS(valgrind/valgrind.h) =20 -AC_CHECK_FUNCS_ONCE(tzalloc tzset) +AC_CHECK_FUNCS_ONCE(tzset) =20 ok_so_far=3Dyes AC_CHECK_FUNC(socket, , ok_so_far=3Dno) diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index 0c39be9..4b5a1b4 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -1234,7 +1234,7 @@ three-element lists, with omitted @var{microsec} an= d @var{picosec} components defaulting to zero. =20 @cindex time value - Function arguments, e.g., the @var{time-value} argument to + Function arguments, e.g., the @var{time} argument to @code{current-time-string}, accept a more-general @dfn{time value} format, which can be a list of integers as above, or a single number for seconds since the epoch, or @code{nil} for the current time. You @@ -1244,7 +1244,7 @@ of integers using @code{seconds-to-time}, and into = other forms using @code{decode-time} and @code{float-time}. These functions are described in the following sections. =20 -@defun current-time-string &optional time-value +@defun current-time-string &optional time zone This function returns the current time and date as a human-readable string. The format does not vary for the initial part of the string, which contains the day of week, month, day of month, and time of day @@ -1255,8 +1255,9 @@ characters from the beginning of the string rather = than from the end, as the year might not have exactly four digits, and additional information may some day be added at the end. =20 -The argument @var{time-value}, if given, specifies a time to format, -instead of the current time. +The argument @var{time}, if given, specifies a time to format, +instead of the current time. The optional argument @var{zone} +defaults to the current time zone rule. =20 @example @group @@ -1275,9 +1276,9 @@ multiple of 1000, but this may change as higher-res= olution clocks become available. @end defun =20 -@defun float-time &optional time-value +@defun float-time &optional time This function returns the current time as a floating-point number of -seconds since the epoch. The optional argument @var{time-value}, if +seconds since the epoch. The optional argument @var{time}, if given, specifies a time to convert instead of the current time. =20 @emph{Warning}: Since the result is floating point, it may not be @@ -1286,14 +1287,14 @@ exact. Do not use this function if precise time = stamps are required. @code{time-to-seconds} is an alias for this function. @end defun =20 -@defun seconds-to-time time-value +@defun seconds-to-time time This function converts a time value to list-of-integer form. -For example, if @var{time-value} is a number, @code{(time-to-seconds -(seconds-to-time @var{time-value}))} equals the number unless overflow +For example, if @var{time} is a number, @code{(time-to-seconds +(seconds-to-time @var{time}))} equals the number unless overflow or rounding errors occur. @end defun =20 -@defun current-time-zone &optional time-value +@defun current-time-zone &optional time zone @cindex time zone, current This function returns a list describing the time zone that the user is in. @@ -1309,15 +1310,27 @@ adjustment, then the value is constant through ti= me. If the operating system doesn't supply all the information necessary to compute the value, the unknown elements of the list are @code{nil}. =20 -The argument @var{time-value}, if given, specifies a time value to -analyze instead of the current time. +The argument @var{time}, if given, specifies a time value to +analyze instead of the current time. The optional argument @var{zone} +defaults to the current time zone rule. @end defun =20 -The current time zone is determined by the @env{TZ} environment +@vindex TZ, environment variable +The default time zone is determined by the @env{TZ} environment variable. @xref{System Environment}. For example, you can tell Emacs -to use universal time with @code{(setenv "TZ" "UTC0")}. If @env{TZ} -is not in the environment, Emacs uses a platform-dependent default -time zone. +to default to universal time with @code{(setenv "TZ" "UTC0")}. If +@env{TZ} is not in the environment, Emacs uses system wall clock time, +which is a platform-dependent default time zone. + +@cindex time zone rule +Functions that convert to and from local time accept an optional +@dfn{time zone rule} argument, which specifies the conversion's time +zone and daylight saving time history. If the time zone rule is +omitted or @code{nil}, the conversion uses Emacs's default time zone. +If it is @code{t}, the conversion uses Universal Time. If it is +@code{wall}, the conversion uses the system wall clock time. If it is +a string, the conversion uses the time zone rule equivalent to setting +@env{TZ} to that string. =20 @node Time Conversion @section Time Conversion @@ -1340,13 +1353,14 @@ count the number of years since the year 1 B.C., = and do not skip zero as traditional Gregorian years do; for example, the year number @minus{}37 represents the Gregorian year 38 B.C@. =20 -@defun decode-time &optional time-value +@defun decode-time &optional time zone This function converts a time value into calendrical information. If -you don't specify @var{time-value}, it decodes the current time. The re= turn +you don't specify @var{time}, it decodes the current time, and similarly= +@var{zone} defaults to the current time zone rule. The return value is a list of nine elements, as follows: =20 @example -(@var{seconds} @var{minutes} @var{hour} @var{day} @var{month} @var{year}= @var{dow} @var{dst} @var{zone}) +(@var{seconds} @var{minutes} @var{hour} @var{day} @var{month} @var{year}= @var{dow} @var{dst} @var{utcoff}) @end example =20 Here is what the elements mean: @@ -1370,13 +1384,13 @@ The day of week, as an integer between 0 and 6, w= here 0 stands for Sunday. @item dst @code{t} if daylight saving time is effect, otherwise @code{nil}. -@item zone -An integer indicating the time zone, as the number of seconds east of -Greenwich. +@item utcoff +An integer indicating the UTC offset in seconds, i.e., the number of +seconds east of Greenwich. @end table =20 @strong{Common Lisp Note:} Common Lisp has different meanings for -@var{dow} and @var{zone}. +@var{dow} and @var{utcoff}. @end defun =20 @defun encode-time seconds minutes hour day month year &optional zone @@ -1389,12 +1403,11 @@ Year numbers less than 100 are not treated specia= lly. If you want them to stand for years above 1900, or years above 2000, you must alter them yourself before you call @code{encode-time}. =20 -The optional argument @var{zone} defaults to the current time zone and -its daylight saving time rules. If specified, it can be either a list -(as you would get from @code{current-time-zone}), a string as in the -@env{TZ} environment variable, @code{t} for Universal Time, or an -integer (as you would get from @code{decode-time}). The specified -zone is used without any further alteration for daylight saving time. +The optional argument @var{zone} defaults to the current time zone rule.= +In addition to the usual time zone rule values, it can also be a list +(as you would get from @code{current-time-zone}) or an integer (as +from @code{decode-time}), applied without any further alteration for +daylight saving time. =20 If you pass more than seven arguments to @code{encode-time}, the first six are used as @var{seconds} through @var{year}, the last argument is @@ -1430,11 +1443,12 @@ This function parses the time-string @var{string}= and returns the corresponding time value. @end defun =20 -@defun format-time-string format-string &optional time-value universal +@defun format-time-string format-string &optional time zone =20 -This function converts @var{time-value} (or the current time, if -@var{time-value} is omitted) to a string according to -@var{format-string}. The argument +This function converts @var{time} (or the current time, if +@var{time} is omitted) to a string according to +@var{format-string}. The conversion uses the time zone rule @var{zone} +(or the current time zone rule, if omitted). The argument @var{format-string} may contain @samp{%}-sequences which say to substitute parts of the time. Here is a table of what the @samp{%}-sequences mean: diff --git a/etc/NEWS b/etc/NEWS index 666cccf..5bb7a00 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1014,6 +1014,15 @@ key works) by typing =E2=80=98A-[=E2=80=99 and =E2= =80=98A-]=E2=80=99. +++ ** Time-related changes: =20 +*** Time conversion functions now accept an optional ZONE argument +that specifies the time zone rules for conversion. ZONE is omitted or +nil for Emacs local time, t for Universal Time, =E2=80=98wall=E2=80=99 f= or system wall +clock time, or a string as in =E2=80=98set-time-zone-rule=E2=80=99 for a= time zone +rule. The affected functions are =E2=80=98current-time-string=E2=80=99,= +=E2=80=98current-time-zone=E2=80=99, =E2=80=98decode-time=E2=80=99, and = =E2=80=98format-time-string=E2=80=99. The +function =E2=80=98encode-time=E2=80=99, which already accepted a simple = time zone rule +argument, has been extended to accept all the new forms. + *** Time-related functions now consistently accept numbers (representing seconds since the epoch) and nil (representing the current time) as well as the usual list-of-integer representation. diff --git a/lib/gnulib.mk b/lib/gnulib.mk index 2dd0ef8..1ca12a2 100644 --- a/lib/gnulib.mk +++ b/lib/gnulib.mk @@ -21,7 +21,7 @@ # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --dir=3D. --lib=3Dlibgnu --source-b= ase=3Dlib --m4-base=3Dm4 --doc-base=3Ddoc --tests-base=3Dtests --aux-dir=3D= build-aux --avoid=3Dclose --avoid=3Ddup --avoid=3Dfchdir --avoid=3Dfstat = --avoid=3Dmalloc-posix --avoid=3Dmsvc-inval --avoid=3Dmsvc-nothrow --avoi= d=3Dopen --avoid=3Dopenat-die --avoid=3Dopendir --avoid=3Draise --avoid=3D= save-cwd --avoid=3Dselect --avoid=3Dsigprocmask --avoid=3Dstdarg --avoid=3D= stdbool --avoid=3Dthreadlib --makefile-name=3Dgnulib.mk --conditional-dep= endencies --no-libtool --macro-prefix=3Dgl --no-vc-files alloca-opt binar= y-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits = count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 d= toastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasyn= c fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeo= fday gitlog-to-changelog intprops largefile lstat manywarnings memrchr mk= ostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink rea= dlinkat sig2str socklen stat-time stdalign stddef stdio stpcpy strftime s= trtoimax strtoumax symlink sys_stat sys_time time time_r timer-time times= pec-add timespec-sub unsetenv update-copyright utimens vla warnings +# Reproduce by: gnulib-tool --import --dir=3D. --lib=3Dlibgnu --source-b= ase=3Dlib --m4-base=3Dm4 --doc-base=3Ddoc --tests-base=3Dtests --aux-dir=3D= build-aux --avoid=3Dclose --avoid=3Ddup --avoid=3Dfchdir --avoid=3Dflexme= mber --avoid=3Dfstat --avoid=3Dmalloc-posix --avoid=3Dmsvc-inval --avoid=3D= msvc-nothrow --avoid=3Dopen --avoid=3Dopenat-die --avoid=3Dopendir --avoi= d=3Draise --avoid=3Dsave-cwd --avoid=3Dselect --avoid=3Dsetenv --avoid=3D= sigprocmask --avoid=3Dstdarg --avoid=3Dstdbool --avoid=3Dthreadlib --avoi= d=3Dunsetenv --makefile-name=3Dgnulib.mk --conditional-dependencies --no-= libtool --macro-prefix=3Dgl --no-vc-files alloca-opt binary-io byteswap c= -ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-= zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimes= pec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir fil= emode fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-= changelog intprops largefile lstat manywarnings memrchr mkostemp mktime p= ipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str= socklen stat-time stdalign stddef stdio stpcpy strftime strtoimax strtou= max symlink sys_stat sys_time time time_r time_rz timegm timer-time times= pec-add timespec-sub unsetenv update-copyright utimens vla warnings =20 =20 MOSTLYCLEANFILES +=3D core *.stackdump @@ -655,6 +655,17 @@ EXTRA_libgnu_a_SOURCES +=3D mktime.c =20 ## end gnulib module mktime =20 +## begin gnulib module mktime-internal + +if gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31 + +endif +EXTRA_DIST +=3D mktime-internal.h mktime.c + +EXTRA_libgnu_a_SOURCES +=3D mktime.c + +## end gnulib module mktime-internal + ## begin gnulib module openat-h =20 if gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7 @@ -1589,10 +1600,12 @@ time.h: time.in.h $(top_builddir)/config.status $= (CXXDEFS_H) $(ARG_NONNULL_H) $( -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ + -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ + -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ @@ -1624,6 +1637,24 @@ EXTRA_libgnu_a_SOURCES +=3D time_r.c =20 ## end gnulib module time_r =20 +## begin gnulib module time_rz + + +EXTRA_DIST +=3D time_rz.c + +EXTRA_libgnu_a_SOURCES +=3D time_rz.c + +## end gnulib module time_rz + +## begin gnulib module timegm + + +EXTRA_DIST +=3D mktime-internal.h timegm.c + +EXTRA_libgnu_a_SOURCES +=3D timegm.c + +## end gnulib module timegm + ## begin gnulib module timespec =20 libgnu_a_SOURCES +=3D timespec.c @@ -1806,15 +1837,6 @@ EXTRA_DIST +=3D unistd.in.h =20 ## end gnulib module unistd =20 -## begin gnulib module unsetenv - - -EXTRA_DIST +=3D unsetenv.c - -EXTRA_libgnu_a_SOURCES +=3D unsetenv.c - -## end gnulib module unsetenv - ## begin gnulib module update-copyright =20 =20 diff --git a/lib/strftime.c b/lib/strftime.c index 2426aae..c7cec26 100644 --- a/lib/strftime.c +++ b/lib/strftime.c @@ -121,22 +121,11 @@ extern char *tzname[]; =20 =20 #ifdef _LIBC +# define mktime_z(tz, tm) mktime (tm) # define tzname __tzname # define tzset __tzset #endif =20 -#if !HAVE_TM_GMTOFF -/* Portable standalone applications should supply a "time.h" that - declares a POSIX-compliant localtime_r, for the benefit of older - implementations that lack localtime_r or have a nonstandard one. - See the gnulib time_r module for one way to implement this. */ -# undef __gmtime_r -# undef __localtime_r -# define __gmtime_r gmtime_r -# define __localtime_r localtime_r -#endif - - #ifndef FPRINTFTIME # define FPRINTFTIME 0 #endif @@ -385,12 +374,7 @@ iso_week_days (int yday, int wday) =20 /* When compiling this file, GNU applications can #define my_strftime to a symbol (typically nstrftime) to get an extended strftime with - extra arguments UT and NS. Emacs is a special case for now, but - this Emacs-specific code can be removed once Emacs's config.h - defines my_strftime. */ -#if defined emacs && !defined my_strftime -# define my_strftime nstrftime -#endif + extra arguments TZ and NS. */ =20 #if FPRINTFTIME # undef my_strftime @@ -398,8 +382,9 @@ iso_week_days (int yday, int wday) #endif =20 #ifdef my_strftime -# define extra_args , ut, ns -# define extra_args_spec , int ut, int ns +# undef HAVE_TZSET +# define extra_args , tz, ns +# define extra_args_spec , timezone_t tz, int ns #else # if defined COMPILE_WIDE # define my_strftime wcsftime @@ -411,7 +396,7 @@ iso_week_days (int yday, int wday) # define extra_args # define extra_args_spec /* We don't have this information in general. */ -# define ut 0 +# define tz 1 # define ns 0 #endif =20 @@ -483,7 +468,7 @@ strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s, zone =3D (const char *) tp->tm_zone; #endif #if HAVE_TZNAME - if (ut) + if (!tz) { if (! (zone && *zone)) zone =3D "GMT"; @@ -496,7 +481,12 @@ strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s, tzset (); # endif } + /* The tzset() call might have changed the value. */ + if (!(zone && *zone) && tp->tm_isdst >=3D 0) + zone =3D tzname[tp->tm_isdst !=3D 0]; #endif + if (! zone) + zone =3D ""; =20 if (hour12 > 12) hour12 -=3D 12; @@ -1144,7 +1134,7 @@ strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s, time_t t; =20 ltm =3D *tp; - t =3D mktime (<m); + t =3D mktime_z (tz, <m); =20 /* Generate string value for T using time_t arithmetic; this works even if sizeof (long) < sizeof (time_t). */ @@ -1319,14 +1309,6 @@ strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s, to_lowcase =3D true; } =20 -#if HAVE_TZNAME - /* The tzset() call might have changed the value. */ - if (!(zone && *zone) && tp->tm_isdst >=3D 0) - zone =3D tzname[tp->tm_isdst !=3D 0]; -#endif - if (! zone) - zone =3D ""; - #ifdef COMPILE_WIDE { /* The zone string is always given in multibyte form. We ha= ve @@ -1366,7 +1348,7 @@ strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s, #if HAVE_TM_GMTOFF diff =3D tp->tm_gmtoff; #else - if (ut) + if (!tz) diff =3D 0; else { @@ -1375,7 +1357,7 @@ strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s, time_t lt; =20 ltm =3D *tp; - lt =3D mktime (<m); + lt =3D mktime_z (tz, <m); =20 if (lt =3D=3D (time_t) -1) { @@ -1384,7 +1366,7 @@ strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s, occurred. */ struct tm tm; =20 - if (! __localtime_r (<, &tm) + if (! localtime_rz (tz, <, &tm) || ((ltm.tm_sec ^ tm.tm_sec) | (ltm.tm_min ^ tm.tm_min) | (ltm.tm_hour ^ tm.tm_hour) @@ -1394,7 +1376,7 @@ strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s, break; } =20 - if (! __gmtime_r (<, >m)) + if (! localtime_rz (0, <, >m)) break; =20 diff =3D tm_diff (<m, >m); @@ -1473,15 +1455,3 @@ my_strftime (STREAM_OR_CHAR_T *s, STRFTIME_ARG (si= ze_t maxsize) #if defined _LIBC && ! FPRINTFTIME libc_hidden_def (my_strftime) #endif - - -#if defined emacs && ! FPRINTFTIME -/* For Emacs we have a separate interface which corresponds to the norma= l - strftime function plus the ut argument, but without the ns argument. = */ -size_t -emacs_strftimeu (char *s, size_t maxsize, const char *format, - const struct tm *tp, int ut) -{ - return my_strftime (s, maxsize, format, tp, ut, 0); -} -#endif diff --git a/lib/strftime.h b/lib/strftime.h index 3967afc..2ce6cc5 100644 --- a/lib/strftime.h +++ b/lib/strftime.h @@ -23,11 +23,10 @@ extern "C" { =20 /* Just like strftime, but with two more arguments: POSIX requires that strftime use the local timezone information. - When __UTC is nonzero and tm->tm_zone is NULL or the empty string, - use UTC instead. Use __NS as the number of nanoseconds in the - %N directive. */ + Use the timezone __TZ instead. Use __NS as the number of + nanoseconds in the %N directive. */ size_t nstrftime (char *, size_t, char const *, struct tm const *, - int __utc, int __ns); + timezone_t __tz, int __ns); =20 #ifdef __cplusplus } diff --git a/lib/time.in.h b/lib/time.in.h index 1a6b746..a983f49 100644 --- a/lib/time.in.h +++ b/lib/time.in.h @@ -231,6 +231,25 @@ _GL_CXXALIAS_SYS (strptime, char *, (char const *res= trict __buf, _GL_CXXALIASWARN (strptime); # endif =20 +# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ +typedef struct tm_zone *timezone_t; +_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); +_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); +_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); +_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); +_GL_FUNCDECL_SYS (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3)= )); +_GL_CXXALIAS_SYS (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result)); +_GL_FUNCDECL_SYS (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __result) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_SYS (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __result)); +# endif + /* Convert TM to a time_t value, assuming UTC. */ # if @GNULIB_TIMEGM@ # if @REPLACE_TIMEGM@ diff --git a/lib/time_rz.c b/lib/time_rz.c new file mode 100644 index 0000000..8a4d7d1 --- /dev/null +++ b/lib/time_rz.c @@ -0,0 +1,374 @@ +/* Time zone functions such as tzalloc and localtime_rz + + Copyright 2015 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License alo= ng + with this program; if not, see . */ + +/* Written by Paul Eggert. */ + +/* Although this module is not thread-safe, any races should be fairly + rare and reasonably benign. For complete thread-safety, use a C + library with a working timezone_t type, so that this module is not + needed. */ + +#include + +#include + +#include +#include +#include +#include +#include + +#if !HAVE_TZSET +static void tzset (void) { } +#endif + +/* A time zone rule. */ +struct tm_zone +{ + /* More abbreviations, should they be needed. Their TZ_IS_SET + members are zero. */ + timezone_t next; + + /* If nonzero, the rule represents the TZ environment variable set + to the first "abbreviation" (this may be the empty string). + Otherwise, it represents an unset TZ. */ + char tz_is_set; + + /* A sequence of null-terminated strings packed next to each other. + The strings are followed by an extra null byte. If TZ_IS_SET, + there must be at least one string and the first string (which is + actually a TZ environment value value) may be empty. Otherwise + all strings must be nonempty. + + Abbreviations are stored here because otherwise the values of + tm_zone and/or tzname would be dead after changing TZ and calling + tzset. Abbreviations never move once allocated, and are live + until tzfree is called. */ + char abbrs[FLEXIBLE_ARRAY_MEMBER]; +}; + +/* The approximate size to use for small allocation requests. This is + the largest "small" request for the GNU C library malloc. */ +enum { DEFAULT_MXFAST =3D 64 * sizeof (size_t) / 4 }; + +/* Minimum size of the ABBRS member of struct abbr. ABBRS is larger + only in the unlikely case where an abbreviation longer than this is + used. */ +enum { ABBR_SIZE_MIN =3D DEFAULT_MXFAST - offsetof (struct tm_zone, abbr= s) }; + +static char const TZ[] =3D "TZ"; + +/* Magic cookie timezone_t value, for local time. It differs from + NULL and from all other timezone_t values. Only the address + matters; the pointer is never dereferenced. */ +static timezone_t const local_tz =3D (timezone_t) 1; + +#if HAVE_TM_ZONE || HAVE_TZNAME + +/* Return true if the values A and B differ according to the rules for + tm_isdst: A and B differ if one is zero and the other positive. */ +static bool +isdst_differ (int a, int b) +{ + return !a !=3D !b && 0 <=3D a && 0 <=3D b; +} + +/* Return true if A and B are equal. */ +static int +equal_tm (const struct tm *a, const struct tm *b) +{ + return ! ((a->tm_sec ^ b->tm_sec) + | (a->tm_min ^ b->tm_min) + | (a->tm_hour ^ b->tm_hour) + | (a->tm_mday ^ b->tm_mday) + | (a->tm_mon ^ b->tm_mon) + | (a->tm_year ^ b->tm_year) + | isdst_differ (a->tm_isdst, b->tm_isdst)); +} + +#endif + +/* Copy to ABBRS the abbreviation at ABBR with size ABBR_SIZE (this + includes its trailing null byte). Append an extra null byte to + mark the end of ABBRS. */ +static void +extend_abbrs (char *abbrs, char const *abbr, size_t abbr_size) +{ + memcpy (abbrs, abbr, abbr_size); + abbrs[abbr_size] =3D '\0'; +} + +/* Return a newly allocated time zone for NAME, or NULL on failure. + As a special case, return a nonzero constant for wall clock time, a + constant that survives freeing. */ +timezone_t +tzalloc (char const *name) +{ + size_t name_size =3D name ? strlen (name) + 1 : 0; + size_t abbr_size =3D name_size < ABBR_SIZE_MIN ? ABBR_SIZE_MIN : name_= size + 1; + timezone_t tz =3D malloc (offsetof (struct tm_zone, abbrs) + abbr_size= ); + if (tz) + { + tz->next =3D NULL; + tz->tz_is_set =3D !!name; + extend_abbrs (tz->abbrs, name, name_size); + } + return tz; +} + +#if HAVE_TZNAME +/* If TZNAME_ADDRESS is nonnull, an assignment of a saved abbreviation. + TZNAME_ADDRESS should be either null, or &tzname[0], or &tzname[1]. + *TZNAME_ADDRESS =3D TZNAME_VALUE should be done after revert_tz + (indirectly) calls tzset, so that revert_tz can overwrite tzset's + assignment to tzname. Also, it should be done at the start of + the next localtime_tz or mktime_z, to undo the overwrite. */ +static char **tzname_address; +static char *tzname_value; +#endif + +/* Save into TZ any nontrivial time zone abbreviation used by TM, + and update *TM (or prepare to update tzname) if they use the abbrevia= tion. + Return true if successful, false (setting errno) otherwise. */ +static bool +save_abbr (timezone_t tz, struct tm *tm) +{ +#if HAVE_TM_ZONE || HAVE_TZNAME + char const *zone =3D NULL; + char **tzname_zone =3D NULL; + char *zone_copy =3D (char *) ""; +# if HAVE_TM_ZONE + zone =3D tm->tm_zone; +# endif +# if HAVE_TZNAME + if (! (zone && *zone) && 0 <=3D tm->tm_isdst) + zone =3D *(tzname_zone =3D &tzname[0 < tm->tm_isdst]); +# endif + + /* No need to replace null zones, or zones within the struct tm. */ + if (!zone || ((char *) tm <=3D zone && zone < (char *) (tm + 1))) + return true; + + if (*zone) + { + zone_copy =3D tz->abbrs; + + while (strcmp (zone_copy, zone) !=3D 0) + { + if (! (*zone_copy || (zone_copy =3D=3D tz->abbrs && tz->tz_is_= set))) + { + size_t zone_size =3D strlen (zone) + 1; + if (zone_size < tz->abbrs + ABBR_SIZE_MIN - zone_copy) + extend_abbrs (zone_copy, zone, zone_size); + else + { + tz =3D tz->next =3D tzalloc (zone); + if (!tz) + return false; + tz->tz_is_set =3D 0; + zone_copy =3D tz->abbrs; + } + break; + } + + zone_copy +=3D strlen (zone_copy) + 1; + if (!*zone_copy && tz->next) + { + tz =3D tz->next; + zone_copy =3D tz->abbrs; + } + } + } + + /* Replace the zone name so that its lifetime matches that of TZ. */ +# if HAVE_TM_ZONE + if (!tzname_zone) + tm->tm_zone =3D zone_copy; +# endif +# if HAVE_TZNAME + tzname_address =3D tzname_zone; + tzname_value =3D zone_copy; +# endif +#endif + return true; +} + +/* Free a time zone. */ +void +tzfree (timezone_t tz) +{ + if (tz !=3D local_tz) + while (tz) + { + timezone_t next =3D tz->next; + free (tz); + tz =3D next; + } +} + +/* Get and set the TZ environment variable. These functions can be + overridden by programs like Emacs that manage their own environment. = */ + +#ifndef getenv_TZ +static char * +getenv_TZ (void) +{ + return getenv (TZ); +} +#endif + +#ifndef setenv_TZ +static int +setenv_TZ (char const *tz) +{ + return tz ? setenv (TZ, tz, 1) : unsetenv (TZ); +} +#endif + +/* Change the environment to match the specified timezone_t value. + Return true if successful, false (setting errno) otherwise. */ +static bool +change_env (timezone_t tz) +{ + if (setenv_TZ (tz->tz_is_set ? tz->abbrs : NULL) !=3D 0) + return false; + tzset (); + return true; +} + +/* Temporarily set the time zone to TZ, which must not be null. + Return LOCAL_TZ if the time zone setting is already correct. + Otherwise return a newly allocated time zone representing the old + setting, or NULL (setting errno) on failure. */ +static timezone_t +set_tz (timezone_t tz) +{ + char *env_tz =3D getenv_TZ (); + if (env_tz + ? tz->tz_is_set && strcmp (tz->abbrs, env_tz) =3D=3D 0 + : !tz->tz_is_set) + return local_tz; + else + { + timezone_t old_tz =3D tzalloc (env_tz); + if (!old_tz) + return old_tz; + if (! change_env (tz)) + { + int saved_errno =3D errno; + tzfree (old_tz); + errno =3D saved_errno; + return NULL; + } + return old_tz; + } +} + +/* Restore an old setting returned by set_tz. It must not be null. + Return true (preserving errno) if successful, false (setting errno) + otherwise. */ +static bool +revert_tz (timezone_t tz) +{ + if (tz =3D=3D local_tz) + return true; + else + { + int saved_errno =3D errno; + bool ok =3D change_env (tz); + if (!ok) + saved_errno =3D errno; +#if HAVE_TZNAME + if (!ok) + tzname_address =3D NULL; + if (tzname_address) + { + char *old_value =3D *tzname_address; + *tzname_address =3D tzname_value; + tzname_value =3D old_value; + } +#endif + tzfree (tz); + errno =3D saved_errno; + return ok; + } +} + +/* Restore an old tzname setting that was temporarily munged by revert_t= z. */ +static void +restore_tzname (void) +{ +#if HAVE_TZNAME + if (tzname_address) + { + *tzname_address =3D tzname_value; + tzname_address =3D NULL; + } +#endif +} + +/* Use time zone TZ to compute localtime_r (T, TM). */ +struct tm * +localtime_rz (timezone_t tz, time_t const *t, struct tm *tm) +{ + restore_tzname (); + + if (!tz) + return gmtime_r (t, tm); + else + { + timezone_t old_tz =3D set_tz (tz); + if (old_tz) + { + tm =3D localtime_r (t, tm); + if (tm && !save_abbr (tz, tm)) + tm =3D NULL; + if (revert_tz (old_tz)) + return tm; + } + return NULL; + } +} + +/* Use time zone TZ to compute mktime (TM). */ +time_t +mktime_z (timezone_t tz, struct tm *tm) +{ + restore_tzname (); + + if (!tz) + return timegm (tm); + else + { + timezone_t old_tz =3D set_tz (tz); + if (old_tz) + { + time_t t =3D mktime (tm); +#if HAVE_TM_ZONE || HAVE_TZNAME + time_t badtime =3D -1; + struct tm tm_1; + if ((t !=3D badtime + || (localtime_r (&t, &tm_1) && equal_tm (tm, &tm_1))) + && !save_abbr (tz, tm)) + t =3D badtime; +#endif + if (revert_tz (old_tz)) + return t; + } + return -1; + } +} diff --git a/lib/timegm.c b/lib/timegm.c new file mode 100644 index 0000000..11c485f --- /dev/null +++ b/lib/timegm.c @@ -0,0 +1,38 @@ +/* Convert UTC calendar time to simple time. Like mktime but assumes UT= C. + + Copyright (C) 1994, 1997, 2003-2004, 2006-2007, 2009-2015 Free Softwa= re + Foundation, Inc. This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . = */ + +#ifndef _LIBC +# include +#endif + +#include + +#ifndef _LIBC +# undef __gmtime_r +# define __gmtime_r gmtime_r +# define __mktime_internal mktime_internal +# include "mktime-internal.h" +#endif + +time_t +timegm (struct tm *tmp) +{ + static time_t gmtime_offset; + tmp->tm_isdst =3D 0; + return __mktime_internal (tmp, __gmtime_r, &gmtime_offset); +} diff --git a/lisp/time-stamp.el b/lisp/time-stamp.el index 24e5ef4..1e0fe99 100644 --- a/lisp/time-stamp.el +++ b/lisp/time-stamp.el @@ -420,16 +420,8 @@ format the string." (or ts-format (setq ts-format time-stamp-format)) (if (stringp ts-format) - (if (stringp time-stamp-time-zone) - (let ((ts-real-time-zone (getenv "TZ"))) - (unwind-protect - (progn - (setenv "TZ" time-stamp-time-zone) - (format-time-string - (time-stamp-string-preprocess ts-format))) - (setenv "TZ" ts-real-time-zone))) - (format-time-string - (time-stamp-string-preprocess ts-format))) + (format-time-string (time-stamp-string-preprocess ts-format) + nil time-stamp-time-zone) ;; handle version 1 compatibility (cond ((or (eq time-stamp-old-format-warn 'error) (and (eq time-stamp-old-format-warn 'ask) diff --git a/lisp/time.el b/lisp/time.el index ae0e598..d35f5b9 100644 --- a/lisp/time.el +++ b/lisp/time.el @@ -160,15 +160,8 @@ LABEL is a string to display as the label of that TI= MEZONE's time." (defcustom display-time-world-list ;; Determine if zoneinfo style timezones are supported by testing that= ;; America/New York and Europe/London return different timezones. - (let ((old-tz (getenv "TZ")) - gmt nyt) - (unwind-protect - (progn - (setenv "TZ" "America/New_York") - (setq nyt (format-time-string "%z")) - (setenv "TZ" "Europe/London") - (setq gmt (format-time-string "%z"))) - (setenv "TZ" old-tz)) + (let ((nyt (format-time-string "%z" nil "America/New_York")) + (gmt (format-time-string "%z" nil "Europe/London"))) (if (string-equal nyt gmt) legacy-style-world-list zoneinfo-style-world-list)) @@ -523,21 +516,19 @@ See `display-time-world'." "Replace current buffer text with times in various zones, based on ALI= ST." (let ((inhibit-read-only t) (buffer-undo-list t) - (old-tz (getenv "TZ")) + (now (current-time)) (max-width 0) result fmt) (erase-buffer) - (unwind-protect - (dolist (zone alist) - (let* ((label (cadr zone)) - (width (string-width label))) - (setenv "TZ" (car zone)) - (push (cons label - (format-time-string display-time-world-time-format)) - result) - (when (> width max-width) - (setq max-width width)))) - (setenv "TZ" old-tz)) + (dolist (zone alist) + (let* ((label (cadr zone)) + (width (string-width label))) + (push (cons label + (format-time-string display-time-world-time-format + now (car zone))) + result) + (when (> width max-width) + (setq max-width width)))) (setq fmt (concat "%-" (int-to-string max-width) "s %s\n")) (dolist (timedata (nreverse result)) (insert (format fmt (car timedata) (cdr timedata)))) diff --git a/lisp/vc/add-log.el b/lisp/vc/add-log.el index eb7e5bf..c90413c 100644 --- a/lisp/vc/add-log.el +++ b/lisp/vc/add-log.el @@ -581,8 +581,8 @@ If t, use universal time.") (put 'add-log-time-zone-rule 'safe-local-variable (lambda (x) (or (booleanp x) (stringp x)))) =20 -(defun add-log-iso8601-time-zone (&optional time) - (let* ((utc-offset (or (car (current-time-zone time)) 0)) +(defun add-log-iso8601-time-zone (&optional time zone) + (let* ((utc-offset (or (car (current-time-zone time zone)) 0)) (sign (if (< utc-offset 0) ?- ?+)) (sec (abs utc-offset)) (ss (% sec 60)) @@ -596,12 +596,11 @@ If t, use universal time.") =20 (defvar add-log-iso8601-with-time-zone nil) =20 -(defun add-log-iso8601-time-string () - (let ((time (format-time-string "%Y-%m-%d" - nil (eq t add-log-time-zone-rule)))) +(defun add-log-iso8601-time-string (&optional time zone) + (let ((date (format-time-string "%Y-%m-%d" time zone))) (if add-log-iso8601-with-time-zone - (concat time " " (add-log-iso8601-time-zone)) - time))) + (concat date " " (add-log-iso8601-time-zone time zone)) + date))) =20 (defun change-log-name () "Return (system-dependent) default name for a change log file." @@ -848,14 +847,8 @@ non-nil, otherwise in local time." (let ((new-entries (mapcar (lambda (addr) (concat - (if (stringp add-log-time-zone-rule) - (let ((tz (getenv "TZ"))) - (unwind-protect - (progn - (setenv "TZ" add-log-time-zone-rule)= - (funcall add-log-time-format)) - (setenv "TZ" tz))) - (funcall add-log-time-format)) + (funcall add-log-time-format + nil add-log-time-zone-rule) " " full-name " <" addr ">")) (if (consp mailing-address) diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index d595497..acbd9c0 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -872,7 +872,8 @@ Return non-nil if it is." (and (boundp 'user-mail-address) user-mail-address))) (time (or (and (boundp 'add-log-time-format) (functionp add-log-time-format) - (funcall add-log-time-format)) + (funcall add-log-time-format + nil add-log-time-zone-rule)) (format-time-string "%Y-%m-%d")))) (if (null log-edit-changelog-use-first) (looking-at (regexp-quote (format "%s %s <%s>" time name mail)= )) diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 index 0425d02..cf71d7e 100644 --- a/m4/gnulib-comp.m4 +++ b/m4/gnulib-comp.m4 @@ -98,6 +98,7 @@ AC_DEFUN([gl_EARLY], # Code from module memrchr: # Code from module mkostemp: # Code from module mktime: + # Code from module mktime-internal: # Code from module multiarch: # Code from module nocrash: # Code from module openat-h: @@ -141,13 +142,14 @@ AC_DEFUN([gl_EARLY], # Code from module tempname: # Code from module time: # Code from module time_r: + # Code from module time_rz: + # Code from module timegm: # Code from module timer-time: # Code from module timespec: # Code from module timespec-add: # Code from module timespec-sub: # Code from module u64: # Code from module unistd: - # Code from module unsetenv: # Code from module update-copyright: # Code from module utimens: # Code from module vararrays: @@ -385,15 +387,20 @@ AC_DEFUN([gl_INIT], gl_PREREQ_TIME_R fi gl_TIME_MODULE_INDICATOR([time_r]) + gl_TIME_RZ + if test "$HAVE_TIMEZONE_T" =3D 0; then + AC_LIBOBJ([time_rz]) + fi + gl_TIME_MODULE_INDICATOR([time_rz]) + gl_FUNC_TIMEGM + if test $HAVE_TIMEGM =3D 0 || test $REPLACE_TIMEGM =3D 1; then + AC_LIBOBJ([timegm]) + gl_PREREQ_TIMEGM + fi + gl_TIME_MODULE_INDICATOR([timegm]) gl_TIMER_TIME gl_TIMESPEC gl_UNISTD_H - gl_FUNC_UNSETENV - if test $HAVE_UNSETENV =3D 0 || test $REPLACE_UNSETENV =3D 1; then - AC_LIBOBJ([unsetenv]) - gl_PREREQ_UNSETENV - fi - gl_STDLIB_MODULE_INDICATOR([unsetenv]) gl_UTIMENS AC_C_VARARRAYS gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b=3Dfalse @@ -404,6 +411,7 @@ AC_DEFUN([gl_INIT], gl_gnulib_enabled_getgroups=3Dfalse gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=3Dfalse gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1=3Dfalse + gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31=3Dfalse gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7=3Dfalse gl_gnulib_enabled_pathmax=3Dfalse gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=3Dfalse @@ -506,6 +514,17 @@ AC_DEFUN([gl_INIT], fi fi } + func_gl_gnulib_m4code_5264294aa0a5557541b53c8c741f7f31 () + { + if ! $gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31; then + gl_FUNC_MKTIME_INTERNAL + if test $REPLACE_MKTIME =3D 1; then + AC_LIBOBJ([mktime]) + gl_PREREQ_MKTIME + fi + gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31=3Dtrue + fi + } func_gl_gnulib_m4code_03e0aaad4cb89ca757653bd367a6ccb7 () { if ! $gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7; then @@ -653,6 +672,9 @@ AC_DEFUN([gl_INIT], if { test $HAVE_DECL_STRTOUMAX =3D 0 || test $REPLACE_STRTOUMAX =3D 1;= } && test $ac_cv_type_unsigned_long_long_int =3D yes; then func_gl_gnulib_m4code_strtoull fi + if test $HAVE_TIMEGM =3D 0 || test $REPLACE_TIMEGM =3D 1; then + func_gl_gnulib_m4code_5264294aa0a5557541b53c8c741f7f31 + fi m4_pattern_allow([^gl_GNULIB_ENABLED_]) AM_CONDITIONAL([gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b], [= $gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b]) AM_CONDITIONAL([gl_GNULIB_ENABLED_dirfd], [$gl_gnulib_enabled_dirfd]) @@ -662,6 +684,7 @@ AC_DEFUN([gl_INIT], AM_CONDITIONAL([gl_GNULIB_ENABLED_getgroups], [$gl_gnulib_enabled_getg= roups]) AM_CONDITIONAL([gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36], [= $gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36]) AM_CONDITIONAL([gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1], [= $gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1]) + AM_CONDITIONAL([gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31], [= $gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31]) AM_CONDITIONAL([gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7], [= $gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7]) AM_CONDITIONAL([gl_GNULIB_ENABLED_pathmax], [$gl_gnulib_enabled_pathma= x]) AM_CONDITIONAL([gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c], [= $gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c]) @@ -938,6 +961,8 @@ AC_DEFUN([gl_FILE_LIST], [ lib/tempname.h lib/time.in.h lib/time_r.c + lib/time_rz.c + lib/timegm.c lib/timespec-add.c lib/timespec-sub.c lib/timespec.c @@ -946,7 +971,6 @@ AC_DEFUN([gl_FILE_LIST], [ lib/u64.h lib/unistd.c lib/unistd.in.h - lib/unsetenv.c lib/utimens.c lib/utimens.h lib/verify.h @@ -1011,7 +1035,6 @@ AC_DEFUN([gl_FILE_LIST], [ m4/readlink.m4 m4/readlinkat.m4 m4/secure_getenv.m4 - m4/setenv.m4 m4/sha1.m4 m4/sha256.m4 m4/sha512.m4 @@ -1043,6 +1066,8 @@ AC_DEFUN([gl_FILE_LIST], [ m4/tempname.m4 m4/time_h.m4 m4/time_r.m4 + m4/time_rz.m4 + m4/timegm.m4 m4/timer_time.m4 m4/timespec.m4 m4/tm_gmtoff.m4 diff --git a/m4/sys_time_h.m4 b/m4/sys_time_h.m4 index 50133b9..28c8b1a 100644 --- a/m4/sys_time_h.m4 +++ b/m4/sys_time_h.m4 @@ -105,6 +105,7 @@ AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS], HAVE_GETTIMEOFDAY=3D1; AC_SUBST([HAVE_GETTIMEOFDAY]) HAVE_STRUCT_TIMEVAL=3D1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) HAVE_SYS_TIME_H=3D1; AC_SUBST([HAVE_SYS_TIME_H]) + HAVE_TIMEZONE_T=3D0; AC_SUBST([HAVE_TIMEZONE_T]) REPLACE_GETTIMEOFDAY=3D0; AC_SUBST([REPLACE_GETTIMEOFDAY]) REPLACE_STRUCT_TIMEVAL=3D0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) ]) diff --git a/m4/time_h.m4 b/m4/time_h.m4 index d9c41a4..754b469 100644 --- a/m4/time_h.m4 +++ b/m4/time_h.m4 @@ -109,6 +109,7 @@ AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS], GNULIB_STRPTIME=3D0; AC_SUBST([GNULIB_STRPTIME]) GNULIB_TIMEGM=3D0; AC_SUBST([GNULIB_TIMEGM]) GNULIB_TIME_R=3D0; AC_SUBST([GNULIB_TIME_R]) + GNULIB_TIME_RZ=3D0; AC_SUBST([GNULIB_TIME_RZ]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_LOCALTIME_R=3D1; AC_SUBST([HAVE_DECL_LOCALTIME= _R]) HAVE_NANOSLEEP=3D1; AC_SUBST([HAVE_NANOSLEEP]) diff --git a/m4/time_rz.m4 b/m4/time_rz.m4 new file mode 100644 index 0000000..0c1f2c3 --- /dev/null +++ b/m4/time_rz.m4 @@ -0,0 +1,21 @@ +dnl Time zone functions: tzalloc, localtime_rz, etc. + +dnl Copyright (C) 2015 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl_TIME_RZ], +[ + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) + AC_REQUIRE([AC_STRUCT_TIMEZONE]) + AC_CHECK_FUNCS_ONCE([tzset]) + + AC_CHECK_TYPES([timezone_t], [], [], [[#include ]]) + if test "$ac_cv_type_timezone_t" =3D yes; then + HAVE_TIMEZONE_T=3D1 + fi +]) diff --git a/m4/timegm.m4 b/m4/timegm.m4 new file mode 100644 index 0000000..8e68b99 --- /dev/null +++ b/m4/timegm.m4 @@ -0,0 +1,26 @@ +# timegm.m4 serial 11 +dnl Copyright (C) 2003, 2007, 2009-2015 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_TIMEGM], +[ + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + AC_REQUIRE([gl_FUNC_MKTIME]) + REPLACE_TIMEGM=3D0 + AC_CHECK_FUNCS_ONCE([timegm]) + if test $ac_cv_func_timegm =3D yes; then + if test $gl_cv_func_working_mktime =3D no; then + # Assume that timegm is buggy if mktime is. + REPLACE_TIMEGM=3D1 + fi + else + HAVE_TIMEGM=3D0 + fi +]) + +# Prerequisites of lib/timegm.c. +AC_DEFUN([gl_PREREQ_TIMEGM], [ + : +]) diff --git a/nt/gnulib.mk b/nt/gnulib.mk index 0c2b786..8a57d64 100644 --- a/nt/gnulib.mk +++ b/nt/gnulib.mk @@ -43,7 +43,7 @@ # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --dir=3D. --lib=3Dlibgnu --source-b= ase=3Dlib --m4-base=3Dm4 --doc-base=3Ddoc --tests-base=3Dtests --aux-dir=3D= build-aux --avoid=3Dclose --avoid=3Ddup --avoid=3Dfchdir --avoid=3Dfstat = --avoid=3Dmalloc-posix --avoid=3Dmsvc-inval --avoid=3Dmsvc-nothrow --avoi= d=3Dopen --avoid=3Dopenat-die --avoid=3Dopendir --avoid=3Draise --avoid=3D= save-cwd --avoid=3Dselect --avoid=3Dsigprocmask --avoid=3Dstdarg --avoid=3D= stdbool --avoid=3Dthreadlib --makefile-name=3Dgnulib.mk --conditional-dep= endencies --no-libtool --macro-prefix=3Dgl --no-vc-files alloca-opt binar= y-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits = count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 d= toastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasyn= c fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeo= fday gitlog-to-changelog intprops largefile lstat manywarnings memrchr mk= ostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink rea= dlinkat sig2str socklen stat-time stdalign stddef stdio stpcpy strftime s= trtoimax strtoumax symlink sys_stat sys_time time time_r timer-time times= pec-add timespec-sub unsetenv update-copyright utimens vla warnings +# Reproduce by: gnulib-tool --import --dir=3D. --lib=3Dlibgnu --source-b= ase=3Dlib --m4-base=3Dm4 --doc-base=3Ddoc --tests-base=3Dtests --aux-dir=3D= build-aux --avoid=3Dclose --avoid=3Ddup --avoid=3Dfchdir --avoid=3Dflexme= mber --avoid=3Dfstat --avoid=3Dmalloc-posix --avoid=3Dmsvc-inval --avoid=3D= msvc-nothrow --avoid=3Dopen --avoid=3Dopenat-die --avoid=3Dopendir --avoi= d=3Draise --avoid=3Dsave-cwd --avoid=3Dselect --avoid=3Dsetenv --avoid=3D= sigprocmask --avoid=3Dstdarg --avoid=3Dstdbool --avoid=3Dthreadlib --avoi= d=3Dunsetenv --makefile-name=3Dgnulib.mk --conditional-dependencies --no-= libtool --macro-prefix=3Dgl --no-vc-files alloca-opt binary-io byteswap c= -ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-= zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimes= pec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir fil= emode fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-= changelog intprops largefile lstat manywarnings memrchr mkostemp mktime p= ipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str= socklen stat-time stdalign stddef stdio stpcpy strftime strtoimax strtou= max symlink sys_stat sys_time time time_r time_rz timegm timer-time times= pec-add timespec-sub unsetenv update-copyright utimens vla warnings =20 =20 MOSTLYCLEANFILES +=3D core *.stackdump @@ -487,6 +487,17 @@ EXTRA_libgnu_a_SOURCES +=3D mktime.c =20 ## end gnulib module mktime =20 +## begin gnulib module mktime-internal + +if gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31 + +endif +EXTRA_DIST +=3D mktime-internal.h mktime.c + +EXTRA_libgnu_a_SOURCES +=3D mktime.c + +## end gnulib module mktime-internal + ## begin gnulib module openat-h =20 if gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7 @@ -944,6 +955,54 @@ EXTRA_libgnu_a_SOURCES +=3D symlink.c =20 ## end gnulib module symlink =20 +## begin gnulib module time + +BUILT_SOURCES +=3D time.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNU= LL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ + -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ + -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ + -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ + -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ + -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ + -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ + -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ + -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ + -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ + -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ + -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ + -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ + -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ + -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ + -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ + -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ + -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ + -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ + -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES= _STRUCT_TIMESPEC)|g' \ + -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFIN= ES_STRUCT_TIMESPEC)|g' \ + -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUC= T_TIMESPEC)|g' \ + -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_S= TRUCT_TIMESPEC)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/time.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES +=3D time.h time.h-t + +EXTRA_DIST +=3D time.in.h + +## end gnulib module time + ## begin gnulib module time_r =20 =20 @@ -953,6 +1012,24 @@ EXTRA_libgnu_a_SOURCES +=3D time_r.c =20 ## end gnulib module time_r =20 +## begin gnulib module time_rz + + +EXTRA_DIST +=3D time_rz.c + +EXTRA_libgnu_a_SOURCES +=3D time_rz.c + +## end gnulib module time_rz + +## begin gnulib module timegm + + +EXTRA_DIST +=3D mktime-internal.h timegm.c + +EXTRA_libgnu_a_SOURCES +=3D timegm.c + +## end gnulib module timegm + ## begin gnulib module timespec =20 libgnu_a_SOURCES +=3D timespec.c @@ -981,15 +1058,6 @@ EXTRA_DIST +=3D u64.h =20 ## end gnulib module u64 =20 -## begin gnulib module unsetenv - - -EXTRA_DIST +=3D unsetenv.c - -EXTRA_libgnu_a_SOURCES +=3D unsetenv.c - -## end gnulib module unsetenv - ## begin gnulib module update-copyright =20 =20 diff --git a/src/conf_post.h b/src/conf_post.h index 1a080fa..785e5d7 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -206,6 +206,13 @@ extern void _DebPrint (const char *fmt, ...); #define RE_TRANSLATE_P(TBL) (!EQ (TBL, make_number (0))) #endif =20 +/* Tell time_rz.c to use Emacs's getter and setter for TZ. + Only Emacs uses time_rz so this is OK. */ +#define getenv_TZ emacs_getenv_TZ +#define setenv_TZ emacs_setenv_TZ +extern char *emacs_getenv_TZ (void); +extern int emacs_setenv_TZ (char const *); + #include #include =20 diff --git a/src/editfns.c b/src/editfns.c index e39eed6..9ff39f9 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -44,8 +44,10 @@ along with GNU Emacs. If not, see . */ #include #endif =20 +#include #include #include + #include #include #include @@ -65,9 +67,8 @@ extern Lisp_Object w32_get_internal_run_time (void); #endif =20 static struct lisp_time lisp_time_struct (Lisp_Object, int *); -static void set_time_zone_rule (char const *); static Lisp_Object format_time_string (char const *, ptrdiff_t, struct t= imespec, - bool, struct tm *); + Lisp_Object, struct tm *); static long int tm_gmtoff (struct tm *); static int tm_diff (struct tm *, struct tm *); static void update_buffer_properties (ptrdiff_t, ptrdiff_t); @@ -76,8 +77,13 @@ static void update_buffer_properties (ptrdiff_t, ptrdi= ff_t); # define HAVE_TM_GMTOFF false #endif =20 -/* The startup value of the TZ environment variable; null if unset. */ -static char const *initial_tz; +enum { tzeqlen =3D sizeof "TZ=3D" - 1 }; + +/* Time zones equivalent to current local time, to wall clock time, + and to UTC, respectively. */ +static timezone_t local_tz; +static timezone_t wall_clock_tz; +static timezone_t const utc_tz =3D 0; =20 /* A valid but unlikely setting for the TZ environment variable. It is OK (though a bit slower) if the user chooses this value. */ @@ -94,8 +100,97 @@ init_and_cache_system_name (void) cached_system_name =3D Vsystem_name; } =20 +static struct tm * +emacs_localtime_rz (timezone_t tz, time_t const *t, struct tm *tm) +{ + tm =3D localtime_rz (tz, t, tm); + if (!tm && errno =3D=3D ENOMEM) + memory_full (SIZE_MAX); + return tm; +} + +static time_t +emacs_mktime_z (timezone_t tz, struct tm *tm) +{ + errno =3D 0; + time_t t =3D mktime_z (tz, tm); + if (t =3D=3D (time_t) -1 && errno =3D=3D ENOMEM) + memory_full (SIZE_MAX); + return t; +} + +/* Allocate a timezone, signaling on failure. */ +static timezone_t +xtzalloc (char const *name) +{ + timezone_t tz =3D tzalloc (name); + if (!tz) + memory_full (SIZE_MAX); + return tz; +} + +/* Free a timezone, except do not free the time zone for local time. + Freeing utc_tz is also a no-op. */ +static void +xtzfree (timezone_t tz) +{ + if (tz !=3D local_tz) + tzfree (tz); +} + +/* Convert the Lisp time zone rule ZONE to a timezone_t object. + The returned value either is 0, or is LOCAL_TZ, or is newly allocated= =2E + If SETTZ, set Emacs local time to the time zone rule; otherwise, + the caller should eventually pass the returned value to xtzfree. */ +static timezone_t +tzlookup (Lisp_Object zone, bool settz) +{ + static char const tzbuf_format[] =3D "XXX%s%"pI"d:%02d:%02d"; + char tzbuf[sizeof tzbuf_format + INT_STRLEN_BOUND (EMACS_INT)]; + char const *zone_string; + timezone_t new_tz; + + if (NILP (zone)) + return local_tz; + else if (EQ (zone, Qt)) + { + zone_string =3D "UTC0"; + new_tz =3D utc_tz; + } + else + { + if (EQ (zone, Qwall)) + zone_string =3D 0; + else if (STRINGP (zone)) + zone_string =3D SSDATA (zone); + else if (INTEGERP (zone)) + { + EMACS_INT abszone =3D eabs (XINT (zone)), hour =3D abszone / (60 * 60= ); + int min =3D (abszone / 60) % 60, sec =3D abszone % 60; + sprintf (tzbuf, tzbuf_format, &"-"[XINT (zone) < 0], hour, min, sec);= + zone_string =3D tzbuf; + } + else + xsignal2 (Qerror, build_string ("Invalid time zone specification"), + zone); + new_tz =3D xtzalloc (zone_string); + } + + if (settz) + { + block_input (); + emacs_setenv_TZ (zone_string); + timezone_t old_tz =3D local_tz; + local_tz =3D new_tz; + tzfree (old_tz); + unblock_input (); + } + + return new_tz; +} + void -init_editfns (void) +init_editfns (bool dumping) { const char *user_name; register char *p; @@ -108,7 +203,7 @@ init_editfns (void) #ifndef CANNOT_DUMP /* When just dumping out, set the time zone to a known unlikely value and skip the rest of this function. */ - if (!initialized) + if (dumping) { # ifdef HAVE_TZSET xputenv (dump_tz_string); @@ -119,7 +214,6 @@ init_editfns (void) #endif =20 char *tz =3D getenv ("TZ"); - initial_tz =3D tz; =20 #if !defined CANNOT_DUMP && defined HAVE_TZSET /* If the execution TZ happens to be the same as the dump TZ, @@ -127,7 +221,7 @@ init_editfns (void) to force the underlying implementation to reload the TZ info. This is needed on implementations that load TZ info from files, since the TZ file contents may differ between dump and execution. = */ - if (tz && strcmp (tz, &dump_tz_string[sizeof "TZ=3D" - 1]) =3D=3D 0) + if (tz && strcmp (tz, &dump_tz_string[tzeqlen]) =3D=3D 0) { ++*tz; tzset (); @@ -135,9 +229,10 @@ init_editfns (void) } #endif =20 - /* Call set_time_zone_rule now, so that its call to putenv is done + /* Set the time zone rule now, so that the call to putenv is done before multiple threads are active. */ - set_time_zone_rule (tz); + wall_clock_tz =3D xtzalloc (0); + tzlookup (tz ? build_string (tz) : Qwall, true); =20 pw =3D getpwuid (getuid ()); #ifdef MSDOS @@ -1206,7 +1301,7 @@ of the user with that uid, or nil if there is no su= ch user. */) (That can happen if Emacs is dumpable but you decide to run `temacs -l loadup' and not dump. */ if (NILP (Vuser_login_name)) - init_editfns (); + init_editfns (false); =20 if (NILP (uid)) return Vuser_login_name; @@ -1229,7 +1324,7 @@ This ignores the environment variables LOGNAME and = USER, so it differs from (That can happen if Emacs is dumpable but you decide to run `temacs -l loadup' and not dump. */ if (NILP (Vuser_login_name)) - init_editfns (); + init_editfns (false); return Vuser_real_login_name; } =20 @@ -1384,30 +1479,6 @@ check_time_validity (int validity) } } =20 -/* A substitute for mktime_z on platforms that lack it. It's not - thread-safe, but should be good enough for Emacs in typical use. */ -#ifndef HAVE_TZALLOC -static time_t -mktime_z (timezone_t tz, struct tm *tm) -{ - char *oldtz =3D getenv ("TZ"); - USE_SAFE_ALLOCA; - if (oldtz) - { - size_t oldtzsize =3D strlen (oldtz) + 1; - char *oldtzcopy =3D SAFE_ALLOCA (oldtzsize); - oldtz =3D strcpy (oldtzcopy, oldtz); - } - block_input (); - set_time_zone_rule (tz); - time_t t =3D mktime (tm); - set_time_zone_rule (oldtz); - unblock_input (); - SAFE_FREE (); - return t; -} -#endif - /* Return the upper part of the time T (everything but the bottom 16 bit= s). */ static EMACS_INT hi_time (time_t t) @@ -1848,7 +1919,7 @@ or (if you need time as a string) `format-time-stri= ng'. */) =20 /* Write information into buffer S of size MAXSIZE, according to the FORMAT of length FORMAT_LEN, using time information taken from *TP. - Default to Universal Time if UT, local time otherwise. + Use the time zone specified by TZ. Use NS as the number of nanoseconds in the %N directive. Return the number of bytes written, not including the terminating '\0'. If S is NULL, nothing will be written anywhere; so to @@ -1859,7 +1930,7 @@ or (if you need time as a string) `format-time-stri= ng'. */) bytes in FORMAT and it does not support nanoseconds. */ static size_t emacs_nmemftime (char *s, size_t maxsize, const char *format, - size_t format_len, const struct tm *tp, bool ut, int ns) + size_t format_len, const struct tm *tp, timezone_t tz, int ns) { size_t total =3D 0; =20 @@ -1876,7 +1947,7 @@ emacs_nmemftime (char *s, size_t maxsize, const cha= r *format, if (s) s[0] =3D '\1'; =20 - result =3D nstrftime (s, maxsize, format, tp, ut, ns); + result =3D nstrftime (s, maxsize, format, tp, tz, ns); =20 if (s) { @@ -1901,8 +1972,9 @@ DEFUN ("format-time-string", Fformat_time_string, S= format_time_string, 1, 3, 0, TIME is specified as (HIGH LOW USEC PSEC), as returned by `current-time' or `file-attributes'. The obsolete form (HIGH . LOW) is also still accepted. -The third, optional, argument UNIVERSAL, if non-nil, means describe TIME= -as Universal Time; nil means describe TIME in the local time zone. +The optional ZONE is omitted or nil for Emacs local time, t for +Universal Time, `wall' for system wall clock time, or a string as in +`set-time-zone-rule' for a time zone rule. The value is a copy of FORMAT-STRING, but with certain constructs replac= ed by text that describes the specified date and time in TIME: =20 @@ -1951,8 +2023,8 @@ The modifiers are `E' and `O'. For certain charact= ers X, =20 For example, to produce full ISO 8601 format, use "%FT%T%z". =20 -usage: (format-time-string FORMAT-STRING &optional TIME UNIVERSAL) */) - (Lisp_Object format_string, Lisp_Object timeval, Lisp_Object universal= ) +usage: (format-time-string FORMAT-STRING &optional TIME ZONE) */) + (Lisp_Object format_string, Lisp_Object timeval, Lisp_Object zone) { struct timespec t =3D lisp_time_argument (timeval); struct tm tm; @@ -1961,12 +2033,12 @@ usage: (format-time-string FORMAT-STRING &optiona= l TIME UNIVERSAL) */) format_string =3D code_convert_string_norecord (format_string, Vlocale_coding_system, 1); return format_time_string (SSDATA (format_string), SBYTES (format_stri= ng), - t, ! NILP (universal), &tm); + t, zone, &tm); } =20 static Lisp_Object format_time_string (char const *format, ptrdiff_t formatlen, - struct timespec t, bool ut, struct tm *tmp) + struct timespec t, Lisp_Object zone, struct tm *tmp) { char buffer[4000]; char *buf =3D buffer; @@ -1976,36 +2048,48 @@ format_time_string (char const *format, ptrdiff_t= formatlen, int ns =3D t.tv_nsec; USE_SAFE_ALLOCA; =20 - tmp =3D ut ? gmtime_r (&t.tv_sec, tmp) : localtime_r (&t.tv_sec, tmp);= + timezone_t tz =3D tzlookup (zone, false); + tmp =3D emacs_localtime_rz (tz, &t.tv_sec, tmp); if (! tmp) - time_overflow (); + { + xtzfree (tz); + time_overflow (); + } synchronize_system_time_locale (); =20 while (true) { buf[0] =3D '\1'; - len =3D emacs_nmemftime (buf, size, format, formatlen, tmp, ut, ns= ); + len =3D emacs_nmemftime (buf, size, format, formatlen, tmp, tz, ns= ); if ((0 < len && len < size) || (len =3D=3D 0 && buf[0] =3D=3D '\0'= )) break; =20 /* Buffer was too small, so make it bigger and try again. */ - len =3D emacs_nmemftime (NULL, SIZE_MAX, format, formatlen, tmp, u= t, ns); + len =3D emacs_nmemftime (NULL, SIZE_MAX, format, formatlen, tmp, t= z, ns); if (STRING_BYTES_BOUND <=3D len) - string_overflow (); + { + xtzfree (tz); + string_overflow (); + } size =3D len + 1; buf =3D SAFE_ALLOCA (size); } =20 + xtzfree (tz); bufstring =3D make_unibyte_string (buf, len); SAFE_FREE (); return code_convert_string_norecord (bufstring, Vlocale_coding_system,= 0); } =20 -DEFUN ("decode-time", Fdecode_time, Sdecode_time, 0, 1, 0, - doc: /* Decode a time value as (SEC MINUTE HOUR DAY MONTH YEAR DO= W DST ZONE). +DEFUN ("decode-time", Fdecode_time, Sdecode_time, 0, 2, 0, + doc: /* Decode a time value as (SEC MINUTE HOUR DAY MONTH YEAR DO= W DST UTCOFF). The optional SPECIFIED-TIME should be a list of (HIGH LOW . IGNORED), as from `current-time' and `file-attributes', or nil to use the current time. The obsolete form (HIGH . LOW) is also still accepted. +The optional ZONE is omitted or nil for Emacs local time, t for +Universal Time, `wall' for system wall clock time, or a string as in +`set-time-zone-rule' for a time zone rule. + The list has the following nine members: SEC is an integer between 0 and 60; SEC is 60 for a leap second, which only some operating systems support. MINUTE is an integer between 0 and 59. HOUR is an integer @@ -2013,15 +2097,20 @@ between 0 and 23. DAY is an integer between 1 an= d 31. MONTH is an integer between 1 and 12. YEAR is an integer indicating the four-digit year. DOW is the day of week, an integer between 0 and 6, where 0 is Sunday. DST is t if daylight saving time is in effect, -otherwise nil. ZONE is an integer indicating the number of seconds -east of Greenwich. (Note that Common Lisp has different meanings for -DOW and ZONE.) */) - (Lisp_Object specified_time) +otherwise nil. UTCOFF is an integer indicating the UTC offset in +seconds, i.e., the number of seconds east of Greenwich. (Note that +Common Lisp has different meanings for DOW and UTCOFF.) + +usage: (decode-time &optional TIME ZONE) */) + (Lisp_Object specified_time, Lisp_Object zone) { time_t time_spec =3D lisp_seconds_argument (specified_time); struct tm local_tm, gmt_tm; + timezone_t tz =3D tzlookup (zone, false); + struct tm *tm =3D emacs_localtime_rz (tz, &time_spec, &local_tm); + xtzfree (tz); =20 - if (! (localtime_r (&time_spec, &local_tm) + if (! (tm && MOST_NEGATIVE_FIXNUM - TM_YEAR_BASE <=3D local_tm.tm_year && local_tm.tm_year <=3D MOST_POSITIVE_FIXNUM - TM_YEAR_BASE)) time_overflow (); @@ -2059,35 +2148,13 @@ check_tm_member (Lisp_Object obj, int offset) return n - offset; } =20 -/* Decode ZONE as a time zone specification. */ - -static Lisp_Object -decode_time_zone (Lisp_Object zone) -{ - if (EQ (zone, Qt)) - return build_string ("UTC0"); - else if (STRINGP (zone)) - return zone; - else if (INTEGERP (zone)) - { - static char const tzbuf_format[] =3D "XXX%s%"pI"d:%02d:%02d"; - char tzbuf[sizeof tzbuf_format + INT_STRLEN_BOUND (EMACS_INT)]; - EMACS_INT abszone =3D eabs (XINT (zone)), zone_hr =3D abszone / (6= 0 * 60); - int zone_min =3D (abszone / 60) % 60, zone_sec =3D abszone % 60; - - return make_formatted_string (tzbuf, tzbuf_format, &"-"[XINT (zone= ) < 0], - zone_hr, zone_min, zone_sec); - } - else - xsignal2 (Qerror, build_string ("Invalid time zone specification"), = zone); -} - DEFUN ("encode-time", Fencode_time, Sencode_time, 6, MANY, 0, doc: /* Convert SECOND, MINUTE, HOUR, DAY, MONTH, YEAR and ZONE t= o internal time. This is the reverse operation of `decode-time', which see. -ZONE defaults to the current time zone rule. This can -be a string or t (as from `set-time-zone-rule'), or it can be a list -\(as from `current-time-zone') or an integer (as from `decode-time') +The optional ZONE is omitted or nil for Emacs local time, t for +Universal Time, `wall' for system wall clock time, or a string as in +`set-time-zone-rule' for a time zone rule. It can also be a list (as +from `current-time-zone') or an integer (as from `decode-time') applied without consideration for daylight saving time. =20 You can pass more than 7 arguments; then the first six arguments @@ -2120,14 +2187,9 @@ usage: (encode-time SECOND MINUTE HOUR DAY MONTH Y= EAR &optional ZONE) */) =20 if (CONSP (zone)) zone =3D XCAR (zone); - if (NILP (zone)) - value =3D mktime (&tm); - else - { - timezone_t tz =3D tzalloc (SSDATA (decode_time_zone (zone))); - value =3D mktime_z (tz, &tm); - tzfree (tz); - } + timezone_t tz =3D tzlookup (zone, false); + value =3D emacs_mktime_z (tz, &tm); + xtzfree (tz); =20 if (value =3D=3D (time_t) -1) time_overflow (); @@ -2135,7 +2197,8 @@ usage: (encode-time SECOND MINUTE HOUR DAY MONTH YE= AR &optional ZONE) */) return list2i (hi_time (value), lo_time (value)); } =20 -DEFUN ("current-time-string", Fcurrent_time_string, Scurrent_time_string= , 0, 1, 0, +DEFUN ("current-time-string", Fcurrent_time_string, Scurrent_time_string= , + 0, 2, 0, doc: /* Return the current local time, as a human-readable string= =2E Programs can use this function to decode a time, since the number of columns in each field is fixed @@ -2148,17 +2211,24 @@ If SPECIFIED-TIME is given, it is a time to forma= t instead of the current time. The argument should have the form (HIGH LOW . IGNORED). Thus, you can use times obtained from `current-time' and from `file-attributes'. SPECIFIED-TIME can also have the form (HIGH . LOW), -but this is considered obsolete. */) - (Lisp_Object specified_time) +but this is considered obsolete. + +The optional ZONE is omitted or nil for Emacs local time, t for +Universal Time, `wall' for system wall clock time, or a string as in +`set-time-zone-rule' for a time zone rule. */) + (Lisp_Object specified_time, Lisp_Object zone) { time_t value =3D lisp_seconds_argument (specified_time); + timezone_t tz =3D tzlookup (zone, false); =20 /* Convert to a string in ctime format, except without the trailing newline, and without the 4-digit year limit. Don't use asctime or ctime, as they might dump core if the year is outside the range -999 .. 9999. */ struct tm tm; - if (! localtime_r (&value, &tm)) + struct tm *tmp =3D emacs_localtime_rz (tz, &value, &tm); + xtzfree (tz); + if (! tmp) time_overflow (); =20 static char const wday_name[][4] =3D @@ -2210,7 +2280,7 @@ tm_gmtoff (struct tm *a) #endif } =20 -DEFUN ("current-time-zone", Fcurrent_time_zone, Scurrent_time_zone, 0, 1= , 0, +DEFUN ("current-time-zone", Fcurrent_time_zone, Scurrent_time_zone, 0, 2= , 0, doc: /* Return the offset and name for the local time zone. This returns a list of the form (OFFSET NAME). OFFSET is an integer number of seconds ahead of UTC (east of Greenwich).= @@ -2221,11 +2291,13 @@ instead of using the current time. The argument = should have the form (HIGH LOW . IGNORED). Thus, you can use times obtained from `current-time' and from `file-attributes'. SPECIFIED-TIME can also have the form (HIGH . LOW), but this is considered obsolete. +Optional second arg ZONE is omitted or nil for the local time zone, or +a string as in `set-time-zone-rule'. =20 Some operating systems cannot provide all this information to Emacs; in this case, `current-time-zone' returns a list containing nil for the data it can't find. */) - (Lisp_Object specified_time) + (Lisp_Object specified_time, Lisp_Object zone) { struct timespec value; struct tm local_tm, gmt_tm; @@ -2233,7 +2305,8 @@ the data it can't find. */) =20 zone_offset =3D Qnil; value =3D make_timespec (lisp_seconds_argument (specified_time), 0); - zone_name =3D format_time_string ("%Z", sizeof "%Z" - 1, value, 0, &lo= cal_tm); + zone_name =3D format_time_string ("%Z", sizeof "%Z" - 1, value, + zone, &local_tm); =20 if (HAVE_TM_GMTOFF || gmtime_r (&value.tv_sec, &gmt_tm)) { @@ -2259,42 +2332,48 @@ the data it can't find. */) } =20 DEFUN ("set-time-zone-rule", Fset_time_zone_rule, Sset_time_zone_rule, 1= , 1, 0, - doc: /* Set the local time zone using TZ, a string specifying a t= ime zone rule. -If TZ is nil, use implementation-defined default time zone information. -If TZ is t, use Universal Time. If TZ is an integer, it is treated as i= n -`encode-time'. - -Instead of calling this function, you typically want (setenv "TZ" TZ). -That changes both the environment of the Emacs process and the -variable `process-environment', whereas `set-time-zone-rule' affects -only the former. */) + doc: /* Set the Emacs local time zone using TZ, a string specifyi= ng a time zone rule. +If TZ is nil or `wall', use system wall clock time. If TZ is t, use +Universal Time. If TZ is an integer, treat it as in `encode-time'. + +Instead of calling this function, you typically want something else. +To temporarily use a different time zone rule for just one invocation +of `decode-time', `encode-time', or `format-time-string', pass the +function a ZONE argument. To change local time consistently +throughout Emacs, call (setenv "TZ" TZ): this changes both the +environment of the Emacs process and the variable +`process-environment', whereas `set-time-zone-rule' affects only the +former. */) (Lisp_Object tz) { - const char *tzstring =3D NILP (tz) ? initial_tz : SSDATA (decode_time_= zone (tz)); + tzlookup (NILP (tz) ? Qwall : tz, true); + return Qnil; +} =20 - block_input (); - set_time_zone_rule (tzstring); - unblock_input (); +/* A buffer holding a string of the form "TZ=3Dvalue", intended + to be part of the environment. If TZ is supposed to be unset, + the buffer string is "tZ=3D". */ + static char *tzvalbuf; =20 - return Qnil; +/* Get the local time zone rule. */ +char * +emacs_getenv_TZ (void) +{ + return tzvalbuf[0] =3D=3D 'T' ? tzvalbuf + tzeqlen : 0; } =20 -/* Set the local time zone rule to TZSTRING. +/* Set the local time zone rule to TZSTRING, which can be null to + denote wall clock time. Do not record the setting in LOCAL_TZ. =20 This function is not thread-safe, in theory because putenv is not, but mostly because of the static storage it updates. Other threads that invoke localtime etc. may be adversely affected while this function is executing. */ =20 -static void -set_time_zone_rule (const char *tzstring) +int +emacs_setenv_TZ (const char *tzstring) { - /* A buffer holding a string of the form "TZ=3Dvalue", intended - to be part of the environment. */ - static char *tzvalbuf; static ptrdiff_t tzvalbufsize; - - int tzeqlen =3D sizeof "TZ=3D" - 1; ptrdiff_t tzstringlen =3D tzstring ? strlen (tzstring) : 0; char *tzval =3D tzvalbuf; bool new_tzvalbuf =3D tzvalbufsize <=3D tzeqlen + tzstringlen; @@ -2346,9 +2425,7 @@ set_time_zone_rule (const char *tzstring) xputenv (tzval); } =20 -#ifdef HAVE_TZSET - tzset (); -#endif + return 0; } =0C /* Insert NARGS Lisp objects in the array ARGS by calling INSERT_FUNC @@ -4943,6 +5020,7 @@ void syms_of_editfns (void) { DEFSYM (Qbuffer_access_fontify_functions, "buffer-access-fontify-funct= ions"); + DEFSYM (Qwall, "wall"); =20 DEFVAR_LISP ("inhibit-field-text-motion", Vinhibit_field_text_motion, doc: /* Non-nil means text motion commands don't notice fields. = */); diff --git a/src/emacs.c b/src/emacs.c index 93fb587..6e35496 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -1552,7 +1552,7 @@ Using an Emacs configured with --with-x-toolkit=3Dl= ucid does not have this problem =20 /* This calls putenv and so must precede init_process_emacs. Also, it sets Voperating_system_release, which init_process_emacs uses. = */ - init_editfns (); + init_editfns (dumping); =20 /* These two call putenv. */ #ifdef HAVE_DBUS diff --git a/src/lisp.h b/src/lisp.h index 341603f..02109d7 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -4055,7 +4055,7 @@ extern _Noreturn void time_overflow (void); extern Lisp_Object make_buffer_string (ptrdiff_t, ptrdiff_t, bool); extern Lisp_Object make_buffer_string_both (ptrdiff_t, ptrdiff_t, ptrdif= f_t, ptrdiff_t, bool); -extern void init_editfns (void); +extern void init_editfns (bool); extern void syms_of_editfns (void); =20 /* Defined in buffer.c. */ diff --git a/src/systime.h b/src/systime.h index 744af17..abbe601 100644 --- a/src/systime.h +++ b/src/systime.h @@ -106,20 +106,6 @@ extern struct timespec lisp_to_timespec (struct lisp= _time); extern struct timespec lisp_time_argument (Lisp_Object); #endif =20 -#ifndef HAVE_TZALLOC -# undef mktime_z -# undef timezone_t -# undef tzalloc -# undef tzfree -# define mktime_z emacs_mktime_z -# define timezone_t emacs_timezone_t -# define tzalloc emacs_tzalloc -# define tzfree emacs_tzfree -typedef char const *timezone_t; -INLINE timezone_t tzalloc (char const *name) { return name; } -INLINE void tzfree (timezone_t tz) { } -#endif - INLINE_HEADER_END =20 #endif /* EMACS_SYSTIME_H */ --=20 2.1.0 --------------070208050202080905070901-- From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 26 13:35:12 2015 Received: (at 21020) by debbugs.gnu.org; 26 Jul 2015 17:35:12 +0000 Received: from localhost ([127.0.0.1]:59360 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJPpP-0005PL-Q7 for submit@debbugs.gnu.org; Sun, 26 Jul 2015 13:35:12 -0400 Received: from mtaout26.012.net.il ([80.179.55.182]:50384) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJPpM-0005PA-EN for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 13:35:09 -0400 Received: from conversion-daemon.mtaout26.012.net.il by mtaout26.012.net.il (HyperSendmail v2007.08) id <0NS300700VJH2R00@mtaout26.012.net.il> for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 20:37:52 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout26.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NS3003XBVN4E130@mtaout26.012.net.il>; Sun, 26 Jul 2015 20:37:52 +0300 (IDT) Date: Sun, 26 Jul 2015 20:34:22 +0300 From: Eli Zaretskii Subject: Re: 24.4; `display-time-world' tampers with TZ In-reply-to: <55B51362.2010301@cs.ucla.edu> X-012-Sender: halo1@inter.net.il To: Paul Eggert Message-id: <83lhe2zuu9.fsf@gnu.org> References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Sun, 26 Jul 2015 10:05:38 -0700 > From: Paul Eggert > CC: wgg2@member.fsf.org, 21020@debbugs.gnu.org > > > I hope we have some > > tests to make sure this doesn't cause any regressions. > > test/automated/icalender-tests.el exercises the new code. But the tests there that play with TZ are all expected failures on MS-Windows, because they use Posix format of time-zone definition that Windows runtime doesn't support. So that probably means there are no tests that could be used on Windows. > Also, the MS-Windows port can't entirely skip the time module any > more, as that module arranges for time.h to declare localtime_rz and > friends. This could conflict with time.h in nt/inc/sys/, no? From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 26 13:38:05 2015 Received: (at 21020) by debbugs.gnu.org; 26 Jul 2015 17:38:05 +0000 Received: from localhost ([127.0.0.1]:59364 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJPsD-0005Tj-EW for submit@debbugs.gnu.org; Sun, 26 Jul 2015 13:38:05 -0400 Received: from mtaout29.012.net.il ([80.179.55.185]:45712) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJPsA-0005Ta-V7 for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 13:38:03 -0400 Received: from conversion-daemon.mtaout29.012.net.il by mtaout29.012.net.il (HyperSendmail v2007.08) id <0NS300B00VALGE00@mtaout29.012.net.il> for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 20:37:39 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout29.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NS300BTVVMROH00@mtaout29.012.net.il>; Sun, 26 Jul 2015 20:37:39 +0300 (IDT) Date: Sun, 26 Jul 2015 20:37:51 +0300 From: Eli Zaretskii Subject: Re: bug#21020: 24.4; `display-time-world' tampers with TZ In-reply-to: <83lhe2zuu9.fsf@gnu.org> X-012-Sender: halo1@inter.net.il To: eggert@cs.ucla.edu Message-id: <83k2tmzuog.fsf@gnu.org> References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Sun, 26 Jul 2015 20:34:22 +0300 > From: Eli Zaretskii > Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org > > > Also, the MS-Windows port can't entirely skip the time module any > > more, as that module arranges for time.h to declare localtime_rz and > > friends. > > This could conflict with time.h in nt/inc/sys/, no? Also, lib/time.h seems to want to replace 'localtime', which might clash with 'sys_localtime' we currently use as replacement on w32. From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 26 13:55:42 2015 Received: (at 21020) by debbugs.gnu.org; 26 Jul 2015 17:55:42 +0000 Received: from localhost ([127.0.0.1]:59392 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJQ9G-0005tb-2P for submit@debbugs.gnu.org; Sun, 26 Jul 2015 13:55:42 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:34453) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJQ9E-0005tT-3e for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 13:55:40 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 7837516099B; Sun, 26 Jul 2015 10:55:39 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id qHQWBE5acTxC; Sun, 26 Jul 2015 10:55:38 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id C35D0160CB6; Sun, 26 Jul 2015 10:55:38 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id Q3-gz_SJQI4q; Sun, 26 Jul 2015 10:55:38 -0700 (PDT) Received: from [192.168.1.9] (pool-100-32-155-148.lsanca.fios.verizon.net [100.32.155.148]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id A178416099B; Sun, 26 Jul 2015 10:55:38 -0700 (PDT) Message-ID: <55B51F1A.2000100@cs.ucla.edu> Date: Sun, 26 Jul 2015 10:55:38 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: 24.4; `display-time-world' tampers with TZ References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> In-Reply-To: <83lhe2zuu9.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) Eli Zaretskii wrote: >> test/automated/icalender-tests.el exercises the new code. > > But the tests there that play with TZ are all expected failures on > MS-Windows, because they use Posix format of time-zone definition that > Windows runtime doesn't support. So that probably means there are no > tests that could be used on Windows. OK, didn't know that. Presumably this could be addressed by adding tests for MS-Windows TZ settings, if somebody has the time for this (pun intended...). >> Also, the MS-Windows port can't entirely skip the time module any >> more, as that module arranges for time.h to declare localtime_rz and >> friends. > > This could conflict with time.h in nt/inc/sys/, no? I don't see why. is a different API. This patch affects only . >lib/time.h seems to want to replace 'localtime', which might > clash with 'sys_localtime' we currently use as replacement on w32. The replacement is conditional, and the condition should be false on w32. From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 26 14:21:53 2015 Received: (at 21020) by debbugs.gnu.org; 26 Jul 2015 18:21:53 +0000 Received: from localhost ([127.0.0.1]:59396 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJQYa-0006Vv-C2 for submit@debbugs.gnu.org; Sun, 26 Jul 2015 14:21:52 -0400 Received: from mtaout28.012.net.il ([80.179.55.184]:38763) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJQYW-0006Vl-V9 for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 14:21:50 -0400 Received: from conversion-daemon.mtaout28.012.net.il by mtaout28.012.net.il (HyperSendmail v2007.08) id <0NS300I00X4MJP00@mtaout28.012.net.il> for 21020@debbugs.gnu.org; Sun, 26 Jul 2015 21:21:51 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout28.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NS300JA7XOF5D10@mtaout28.012.net.il>; Sun, 26 Jul 2015 21:21:51 +0300 (IDT) Date: Sun, 26 Jul 2015 21:21:36 +0300 From: Eli Zaretskii Subject: Re: 24.4; `display-time-world' tampers with TZ In-reply-to: <55B51F1A.2000100@cs.ucla.edu> X-012-Sender: halo1@inter.net.il To: Paul Eggert Message-id: <83io96zsnj.fsf@gnu.org> References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> <55B51F1A.2000100@cs.ucla.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Sun, 26 Jul 2015 10:55:38 -0700 > From: Paul Eggert > CC: wgg2@member.fsf.org, 21020@debbugs.gnu.org > > Eli Zaretskii wrote: > > >> test/automated/icalender-tests.el exercises the new code. > > > > But the tests there that play with TZ are all expected failures on > > MS-Windows, because they use Posix format of time-zone definition that > > Windows runtime doesn't support. So that probably means there are no > > tests that could be used on Windows. > > OK, didn't know that. Presumably this could be addressed by adding tests for > MS-Windows TZ settings, if somebody has the time for this (pun intended...). MS-Windows supports only the simplest TZ format, as in EST-5EDT, you cannot tell it when the DST rules begin and end. And those test exercise precisely those begin/end rules that cannot work. > >> Also, the MS-Windows port can't entirely skip the time module any > >> more, as that module arranges for time.h to declare localtime_rz and > >> friends. > > > > This could conflict with time.h in nt/inc/sys/, no? > > I don't see why. is a different API. This patch affects only > . > > >lib/time.h seems to want to replace 'localtime', which might > > clash with 'sys_localtime' we currently use as replacement on w32. > > The replacement is conditional, and the condition should be false on w32. Then I guess we are lucky, and nothing could possibly become broken. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 26 15:48:50 2015 Received: (at 21020-done) by debbugs.gnu.org; 26 Jul 2015 19:48:50 +0000 Received: from localhost ([127.0.0.1]:59401 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJRuj-000083-ON for submit@debbugs.gnu.org; Sun, 26 Jul 2015 15:48:50 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:36153) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJRug-00007u-D3 for 21020-done@debbugs.gnu.org; Sun, 26 Jul 2015 15:48:47 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 5655916099B; Sun, 26 Jul 2015 12:48:45 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 6f7dSBI9Sljp; Sun, 26 Jul 2015 12:48:44 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 845B1160CB6; Sun, 26 Jul 2015 12:48:44 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id mBVglBeW5E5I; Sun, 26 Jul 2015 12:48:44 -0700 (PDT) Received: from [192.168.1.9] (pool-100-32-155-148.lsanca.fios.verizon.net [100.32.155.148]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 5B72716099B; Sun, 26 Jul 2015 12:48:44 -0700 (PDT) Message-ID: <55B5399C.8040202@cs.ucla.edu> Date: Sun, 26 Jul 2015 12:48:44 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: 24.4; `display-time-world' tampers with TZ References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> <55B51F1A.2000100@cs.ucla.edu> <83io96zsnj.fsf@gnu.org> In-Reply-To: <83io96zsnj.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 21020-done Cc: 21020-done@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) Eli Zaretskii wrote: > Then I guess we are lucky, and nothing could possibly become broken. Ha! Fat chance. But I gave it a shot by installing the patch as master commit af32fa956267af40db61051c248597144d41521c and I'm marking this bug as done. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 27 08:29:49 2015 Received: (at 21020) by debbugs.gnu.org; 27 Jul 2015 12:29:49 +0000 Received: from localhost ([127.0.0.1]:59727 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJhXR-0001fH-Gs for submit@debbugs.gnu.org; Mon, 27 Jul 2015 08:29:49 -0400 Received: from mtaout22.012.net.il ([80.179.55.172]:38418) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJhXO-0001f5-O4 for 21020@debbugs.gnu.org; Mon, 27 Jul 2015 08:29:48 -0400 Received: from conversion-daemon.a-mtaout22.012.net.il by a-mtaout22.012.net.il (HyperSendmail v2007.08) id <0NS500J00BYTP700@a-mtaout22.012.net.il> for 21020@debbugs.gnu.org; Mon, 27 Jul 2015 15:29:45 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout22.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NS500J2CC1KBG90@a-mtaout22.012.net.il>; Mon, 27 Jul 2015 15:29:45 +0300 (IDT) Date: Mon, 27 Jul 2015 15:29:33 +0300 From: Eli Zaretskii Subject: Re: 24.4; `display-time-world' tampers with TZ In-reply-to: <55B5399C.8040202@cs.ucla.edu> X-012-Sender: halo1@inter.net.il To: Paul Eggert Message-id: <83fv49zsuq.fsf@gnu.org> References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> <55B51F1A.2000100@cs.ucla.edu> <83io96zsnj.fsf@gnu.org> <55B5399C.8040202@cs.ucla.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Sun, 26 Jul 2015 12:48:44 -0700 > From: Paul Eggert > CC: wgg2@member.fsf.org, 21020-done@debbugs.gnu.org > > Eli Zaretskii wrote: > > Then I guess we are lucky, and nothing could possibly become broken. > > Ha! Fat chance. But I gave it a shot by installing the patch as master > commit af32fa956267af40db61051c248597144d41521c and I'm marking this bug as done. I needed the changes in 7009674 to get this to build cleanly on MinGW. One of the changes in that commit is in lib/time.in.h. This is the same problem already reported for another Gnulib header: http://lists.gnu.org/archive/html/bug-gnulib/2015-06/msg00035.html It sounds like similar changes are needed in other Gnulib headers, lest they produce similar problems at some point. I can provide a list of all the __need_SOMETHING symbols used by the MinGW headers, if that will help. After the above commit, Emacs builds and generally seems to work, but crashes inside icalendar tests. Seems like something with heap corruption. I'm looking into that now. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 27 11:03:01 2015 Received: (at 21020) by debbugs.gnu.org; 27 Jul 2015 15:03:01 +0000 Received: from localhost ([127.0.0.1]:60344 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJjvh-0006vB-8z for submit@debbugs.gnu.org; Mon, 27 Jul 2015 11:03:01 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:53066) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJjve-0006v3-Rl for 21020@debbugs.gnu.org; Mon, 27 Jul 2015 11:02:59 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id DDF9C160CB8; Mon, 27 Jul 2015 08:02:57 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id hVfc0xVlq5eB; Mon, 27 Jul 2015 08:02:57 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 34B39160CBB; Mon, 27 Jul 2015 08:02:57 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 16mB4w-uCzUI; Mon, 27 Jul 2015 08:02:57 -0700 (PDT) Received: from [192.168.1.9] (pool-100-32-155-148.lsanca.fios.verizon.net [100.32.155.148]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 11F4B160CB6; Mon, 27 Jul 2015 08:02:57 -0700 (PDT) Message-ID: <55B6481D.4080208@cs.ucla.edu> Date: Mon, 27 Jul 2015 08:02:53 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: 24.4; `display-time-world' tampers with TZ References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> <55B51F1A.2000100@cs.ucla.edu> <83io96zsnj.fsf@gnu.org> <55B5399C.8040202@cs.ucla.edu> <83fv49zsuq.fsf@gnu.org> In-Reply-To: <83fv49zsuq.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.3 (-) Eli Zaretskii wrote: > I needed the changes in 7009674 to get this to build cleanly on > MinGW. One of the changes in that commit is in lib/time.in.h. Thanks, I ported that code fix back to gnulib, as gnulib master commit b18e6d98e211be6bb0e720952a9baef7da1d27cb. > It sounds like similar changes are needed in other Gnulib headers, > lest they produce similar problems at some point. I can provide a > list of all the __need_SOMETHING symbols used by the MinGW headers, if > that will help. I looked into that and came up with the following list: __need_NULL __need_ptrdiff_t __need_size_t __need_struct_timespec __need_time_t __need___va_list __need_wchar_t __need_wint_t The only other Gnulib header that refers to any of these symbols is stddef.in.h and if it's not used in MinGW then I expect we don't need to worry about it. Though there may be issues in MinGW itself, if it's using these symbols incompatibly with what GCC expects (stddef.h is a GCC header). From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 27 11:22:29 2015 Received: (at 21020) by debbugs.gnu.org; 27 Jul 2015 15:22:29 +0000 Received: from localhost ([127.0.0.1]:60365 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJkEX-0007NR-2z for submit@debbugs.gnu.org; Mon, 27 Jul 2015 11:22:29 -0400 Received: from mtaout22.012.net.il ([80.179.55.172]:39203) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJkEU-0007NI-VU for 21020@debbugs.gnu.org; Mon, 27 Jul 2015 11:22:28 -0400 Received: from conversion-daemon.a-mtaout22.012.net.il by a-mtaout22.012.net.il (HyperSendmail v2007.08) id <0NS500L00JULAK00@a-mtaout22.012.net.il> for 21020@debbugs.gnu.org; Mon, 27 Jul 2015 18:22:25 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout22.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NS500KJ2K1DSYB0@a-mtaout22.012.net.il>; Mon, 27 Jul 2015 18:22:25 +0300 (IDT) Date: Mon, 27 Jul 2015 18:22:14 +0300 From: Eli Zaretskii Subject: Re: 24.4; `display-time-world' tampers with TZ In-reply-to: <55B6481D.4080208@cs.ucla.edu> X-012-Sender: halo1@inter.net.il To: Paul Eggert Message-id: <83a8uhzkux.fsf@gnu.org> References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> <55B51F1A.2000100@cs.ucla.edu> <83io96zsnj.fsf@gnu.org> <55B5399C.8040202@cs.ucla.edu> <83fv49zsuq.fsf@gnu.org> <55B6481D.4080208@cs.ucla.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Mon, 27 Jul 2015 08:02:53 -0700 > From: Paul Eggert > CC: wgg2@member.fsf.org, 21020@debbugs.gnu.org > > > It sounds like similar changes are needed in other Gnulib headers, > > lest they produce similar problems at some point. I can provide a > > list of all the __need_SOMETHING symbols used by the MinGW headers, if > > that will help. > > I looked into that and came up with the following list: > > __need_NULL > __need_ptrdiff_t > __need_size_t > __need_struct_timespec > __need_time_t > __need___va_list > __need_wchar_t > __need_wint_t I think this is about right. > The only other Gnulib header that refers to any of these symbols is stddef.in.h > and if it's not used in MinGW then I expect we don't need to worry about it. It's your call. > Though there may be issues in MinGW itself, if it's using these symbols > incompatibly with what GCC expects (stddef.h is a GCC header). And MinGW comes with it. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 27 11:38:18 2015 Received: (at 21020) by debbugs.gnu.org; 27 Jul 2015 15:38:18 +0000 Received: from localhost ([127.0.0.1]:60382 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJkTp-0007nR-O9 for submit@debbugs.gnu.org; Mon, 27 Jul 2015 11:38:17 -0400 Received: from mtaout20.012.net.il ([80.179.55.166]:48279) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJkTn-0007nF-C8 for 21020@debbugs.gnu.org; Mon, 27 Jul 2015 11:38:16 -0400 Received: from conversion-daemon.a-mtaout20.012.net.il by a-mtaout20.012.net.il (HyperSendmail v2007.08) id <0NS500C00KHAU000@a-mtaout20.012.net.il> for 21020@debbugs.gnu.org; Mon, 27 Jul 2015 18:38:13 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout20.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NS500C9XKRPFCA0@a-mtaout20.012.net.il>; Mon, 27 Jul 2015 18:38:13 +0300 (IDT) Date: Mon, 27 Jul 2015 18:38:02 +0300 From: Eli Zaretskii Subject: Re: bug#21020: 24.4; `display-time-world' tampers with TZ In-reply-to: <83a8uhzkux.fsf@gnu.org> X-012-Sender: halo1@inter.net.il To: eggert@cs.ucla.edu Message-id: <838ua1zk4l.fsf@gnu.org> References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> <55B51F1A.2000100@cs.ucla.edu> <83io96zsnj.fsf@gnu.org> <55B5399C.8040202@cs.ucla.edu> <83fv49zsuq.fsf@gnu.org> <55B6481D.4080208@cs.ucla.edu> <83a8uhzkux.fsf@gnu.org> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Mon, 27 Jul 2015 18:22:14 +0300 > From: Eli Zaretskii > Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org > > > The only other Gnulib header that refers to any of these symbols is stddef.in.h > > and if it's not used in MinGW then I expect we don't need to worry about it. > > It's your call. Btw, I didn't mean only headers used by Emacs, I meant all the Gnulib headers that reference those symbols in a similar manner (i.e. to exclude certain parts of the header). From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 27 13:29:58 2015 Received: (at 21020) by debbugs.gnu.org; 27 Jul 2015 17:29:58 +0000 Received: from localhost ([127.0.0.1]:60475 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJmDt-0006xQ-Ug for submit@debbugs.gnu.org; Mon, 27 Jul 2015 13:29:58 -0400 Received: from mtaout24.012.net.il ([80.179.55.180]:39634) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJmDr-0006xH-O8 for 21020@debbugs.gnu.org; Mon, 27 Jul 2015 13:29:56 -0400 Received: from conversion-daemon.mtaout24.012.net.il by mtaout24.012.net.il (HyperSendmail v2007.08) id <0NS500100PFBLH00@mtaout24.012.net.il> for 21020@debbugs.gnu.org; Mon, 27 Jul 2015 20:21:26 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout24.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NS500GH7PJQFI90@mtaout24.012.net.il>; Mon, 27 Jul 2015 20:21:26 +0300 (IDT) Date: Mon, 27 Jul 2015 20:29:43 +0300 From: Eli Zaretskii Subject: Re: bug#21020: 24.4; `display-time-world' tampers with TZ In-reply-to: <83fv49zsuq.fsf@gnu.org> X-012-Sender: halo1@inter.net.il To: eggert@cs.ucla.edu Message-id: <83zj2hy0e0.fsf@gnu.org> References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> <55B51F1A.2000100@cs.ucla.edu> <83io96zsnj.fsf@gnu.org> <55B5399C.8040202@cs.ucla.edu> <83fv49zsuq.fsf@gnu.org> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Mon, 27 Jul 2015 15:29:33 +0300 > From: Eli Zaretskii > Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org > > After the above commit, Emacs builds and generally seems to work, but > crashes inside icalendar tests. Seems like something with heap > corruption. I'm looking into that now. The reason seems to be these assignments in time_rz.c: static bool revert_tz (timezone_t tz) { if (tz == local_tz) return true; else { int saved_errno = errno; bool ok = change_env (tz); if (!ok) saved_errno = errno; #if HAVE_TZNAME if (!ok) tzname_address = NULL; if (tzname_address) { char *old_value = *tzname_address; *tzname_address = tzname_value; <<<<<<<<<<<<<<<<<<<<<<< tzname_value = old_value; } #endif tzfree (tz); errno = saved_errno; return ok; } } static void restore_tzname (void) { #if HAVE_TZNAME if (tzname_address) { *tzname_address = tzname_value; <<<<<<<<<<<<<<<<<<<<<< tzname_address = NULL; } #endif } If I ifdef away the 2 marked lines, the test suite runs flawlessly to completion. tzname_address is the address of one of the members of the tzname[] array, which holds pointers into the bowels of libc. I don't know why overwriting them with our values causes such trouble, but even if this is supposed to work, it makes me nervous. I'm not even sure I understand completely why this trick is needed (can you explain?). In any case, can we please do this in some less intrusive way, e.g., by copying the TZ names to our private storage? Thanks. From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 27 21:09:41 2015 Received: (at 21020) by debbugs.gnu.org; 28 Jul 2015 01:09:41 +0000 Received: from localhost ([127.0.0.1]:60547 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJtOn-0000yv-1k for submit@debbugs.gnu.org; Mon, 27 Jul 2015 21:09:41 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:43456) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZJtOl-0000yn-2D for 21020@debbugs.gnu.org; Mon, 27 Jul 2015 21:09:39 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 41748160CB6; Mon, 27 Jul 2015 18:09:38 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id HuPQ61u4_U41; Mon, 27 Jul 2015 18:09:37 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 74020160CBA; Mon, 27 Jul 2015 18:09:37 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id vsoYkilOTdTi; Mon, 27 Jul 2015 18:09:37 -0700 (PDT) Received: from [192.168.1.9] (pool-100-32-155-148.lsanca.fios.verizon.net [100.32.155.148]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 4D21C160CB6; Mon, 27 Jul 2015 18:09:37 -0700 (PDT) Message-ID: <55B6D651.4070601@cs.ucla.edu> Date: Mon, 27 Jul 2015 18:09:37 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: bug#21020: 24.4; `display-time-world' tampers with TZ References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> <55B51F1A.2000100@cs.ucla.edu> <83io96zsnj.fsf@gnu.org> <55B5399C.8040202@cs.ucla.edu> <83fv49zsuq.fsf@gnu.org> <83zj2hy0e0.fsf@gnu.org> In-Reply-To: <83zj2hy0e0.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.3 (-) Eli Zaretskii wrote: > I'm not even sure I > understand completely why this trick is needed (can you explain?). On many platforms, calling 'tzset' (either directly, or indirectly via localtime etc.) invalidates tzname[0] and tzname[1]. For example: time_t t = 0; char *p = tzname[0]; localtime (&t); puts (p ? p : "(null)"); Here 'puts' has undefined behavior if tzname[0] has been updated and its old value (equal to P) is no longer a valid pointer. lib/time_rz.c attempted to work around this problem by replacing tzname[0] and tzname[1] with pointers to more-stable copies. Apparently this doesn't work under MinGW. > can we please do this in some less intrusive way, e.g., by > copying the TZ names to our private storage? OK, I did that in master commit 2856b1dd6f0ff5164eb5a54ddfadb9963f9e9237. From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 28 06:37:54 2015 Received: (at 21020) by debbugs.gnu.org; 28 Jul 2015 10:37:54 +0000 Received: from localhost ([127.0.0.1]:60711 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZK2Gf-0007ls-Ui for submit@debbugs.gnu.org; Tue, 28 Jul 2015 06:37:54 -0400 Received: from mtaout20.012.net.il ([80.179.55.166]:44326) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZK2Gc-0007lh-1A for 21020@debbugs.gnu.org; Tue, 28 Jul 2015 06:37:51 -0400 Received: from conversion-daemon.a-mtaout20.012.net.il by a-mtaout20.012.net.il (HyperSendmail v2007.08) id <0NS700K001FUBC00@a-mtaout20.012.net.il> for 21020@debbugs.gnu.org; Tue, 28 Jul 2015 13:37:48 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout20.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NS700KTA1J05I30@a-mtaout20.012.net.il>; Tue, 28 Jul 2015 13:37:48 +0300 (IDT) Date: Tue, 28 Jul 2015 13:37:38 +0300 From: Eli Zaretskii Subject: Re: bug#21020: 24.4; `display-time-world' tampers with TZ In-reply-to: <55B6D651.4070601@cs.ucla.edu> X-012-Sender: halo1@inter.net.il To: Paul Eggert Message-id: <83lhe0y3d9.fsf@gnu.org> References: <55B487B4.7060709@cs.ucla.edu> <83vbd7yny9.fsf@gnu.org> <55B51362.2010301@cs.ucla.edu> <83lhe2zuu9.fsf@gnu.org> <55B51F1A.2000100@cs.ucla.edu> <83io96zsnj.fsf@gnu.org> <55B5399C.8040202@cs.ucla.edu> <83fv49zsuq.fsf@gnu.org> <83zj2hy0e0.fsf@gnu.org> <55B6D651.4070601@cs.ucla.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 21020 Cc: 21020@debbugs.gnu.org, wgg2@member.fsf.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Mon, 27 Jul 2015 18:09:37 -0700 > From: Paul Eggert > CC: 21020@debbugs.gnu.org, wgg2@member.fsf.org > > Eli Zaretskii wrote: > > I'm not even sure I > > understand completely why this trick is needed (can you explain?). > > On many platforms, calling 'tzset' (either directly, or indirectly via localtime > etc.) invalidates tzname[0] and tzname[1]. For example: > > time_t t = 0; > char *p = tzname[0]; > localtime (&t); > puts (p ? p : "(null)"); > > Here 'puts' has undefined behavior if tzname[0] has been updated and its old > value (equal to P) is no longer a valid pointer. > > lib/time_rz.c attempted to work around this problem by replacing tzname[0] and > tzname[1] with pointers to more-stable copies. Apparently this doesn't work > under MinGW. I see, thanks for explaining. > > can we please do this in some less intrusive way, e.g., by > > copying the TZ names to our private storage? > > OK, I did that in master commit 2856b1dd6f0ff5164eb5a54ddfadb9963f9e9237. Thanks, this solves the problem. From unknown Wed Jun 18 23:14:33 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Tue, 25 Aug 2015 11:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator